为什么我的符号计数器是错的?
我有一个函数,其中student_list[i] = "4273 Константинопольский А. А. 4333 знзнз"
和wchar_t test[15] = "знзнз"
,但是counter_debt
等于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);
}
}
当我做一个简单的函数时,
counter_debt
等于2。这是正确的答案。#include <stdio.h>
#include <wchar.h>
int main () {
wchar_t str[] = L"знзнз";
wchar_t * pch;
int count = 0;
pch = wcschr(str, L'н');
while (pch != NULL) {
count++;
pch = wcschr(pch + 1, L'н');
}
printf("%i", count);
return 0;
}
升级版:
char *student_list[1000] = [
"4272 Галкин Г. А. 5445 ззззз",
"4273 Константинопольский А. А. 4333 знзнз",
"4273 Курочкин А. А. 3433 знзнн",
"4272 Козлов И. И. 4443 ззззн"
]
我还有两个
char *student_list
函数。我使用Mac OS X 10.10.1和Apple LLVM 6.0版(clang-600.0.56)
完整程序:https://gist.github.com/lgl/4beee20f8d9a5662fef1
students.txt此处:https://gist.github.com/lgl/ebd21d29700284feea11
最佳答案
它取决于用于存储student_list
中的字符的数据格式:
如果已经wchar_t
,则应使用swscanf()
;
如果是UTF-8,则在对其使用宽字符函数之前,应通过test
将wchar_t
转换为mbstowcs()
。
UPD(如您的示例所示):student_list
应该有wchar_t
,而不是char
。
要使mbstowcs()
工作(此函数取决于区域设置),您需要调用:
setlocale(LC_ALL, "");