C 符号计数器

C 符号计数器,c,C,为什么我的符号计数器是错误的 我有一个函数,其中studentзu list[I]=“4273зззззА.4333зззз”和wcharзt test[15]=“зззз,但反债等于0 void debt() { char name[100]; wchar_t test[15]; wchar_t * pch; int group; int exam; int counter_debt; int i; for (i = 0; i < 4; i++) {

为什么我的符号计数器是错误的

我有一个函数,其中
studentзu list[I]=“4273зззззА.4333зззз”
wcharзt test[15]=“зззз
,但
反债
等于0

void debt() {
  char name[100];
  wchar_t test[15];
  wchar_t * pch;
  int group;
  int exam;
  int counter_debt;
  int i;

  for (i = 0; i < 4; i++) {
    counter_debt = 0;
    sscanf(student_list[i], "%d %[^0-9] %d %S", &group, name, &exam, test);

    pch = wcschr(test, L'н');
    while (pch != NULL) {
      counter_debt++;
      pch = wcschr(pch + 1, L'н');
    }

    printf("%d %s: %d\n", group, name, counter_debt);
  }
}

UPD:


我仍然有两个带有
char*student_list
的函数


我使用Mac OS X 10.10.1和Apple LLVM 6.0版(clang-600.0.56)

完整程序如下:


students.txt此处:

使用swscanf而不是sscanf l。是相同的函数,但它接受宽字符。

这取决于用于在
学生列表中存储字符的数据格式:

  • 如果已经是
    wchar\u t
    ,则应使用
    swscanf()
    
  • 如果是UTF-8,在对其使用宽字符函数之前,应通过
    mbstowcs()
    test
    转换为
    wchar\u t
UPD(如您的示例所示):

student\u list
应该有
wchar\u t
,而不是
char

要使
mbstowcs()
工作(此函数取决于区域设置),您需要调用:

setlocale(LC_ALL, "");

IMO此行错误
sscanf(学生名单[i],%d%[^0-9]%d%S“,&组,姓名,&考试,测试)显示我们什么是<代码>学生们的学生名单名单,代码>显示我们什么是<代码>学生们的学生们的学生名单,代码>代码>显示我们什么是<代码>学生们是学生们的学生们是学生们的学生们是什么是<代码>学生们是学生们的学生们的学生们的学生们的学生们的名单,代码>代码>代码>代码>代码>代码>代码>代码>代码>代码>我们我们我们我们是我们是我们是我们是<<<<<<<<<<<<代码>学生学生们>学生们>学生学生学生们>学生们>学生学生们>学生们是我们是学生们的学生学生们的学生学生们们们是什么什么什么<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<代码>学生们>学生们>学生们>学生们>学生们>学生们>学生们们>学生们>学生们>学生们>学生们们们们们很可能是一个打字错误,但是这个
char*student\u list[1000]=[…
不是C.@alk对不起,你是什么意思?初始值设定项放在大括号中:
{…}
。我仍然有两个带有
char*student_list
@pertpoert的函数,然后通过调试程序检查
student_list
中真正存储的内容。可能是一些cyrylic编码、UTF-8或一些垃圾(因为数据丢失)。请澄清您使用的是什么操作系统和编译器?我使用Mac OS X 10.10.1和Apple LLVM版本6.0(clang-600.0.56)@pertpoert用于存储
students.txt
?如果未知-请显示
students.txt
文件-bi students.txt>常规文件的hextump
文件--mime students.txt students.txt:错误:第22行:regexec错误17,(非法字节序列);字符集=utf-8
。学生文件如下:
char *student_list[1000] = [
  "4272 Галкин Г. А. 5445 ззззз", 
  "4273 Константинопольский А. А. 4333 знзнз", 
  "4273 Курочкин А. А. 3433 знзнн", 
  "4272 Козлов И. И. 4443 ззззн"
]
setlocale(LC_ALL, "");