为什么我的符号计数器错了?
我有一个功能,其中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;
}
UPD:
char *student_list[1000] = [
"4272 Галкин Г. А. 5445 ззззз",
"4273 Константинопольский А. А. 4333 знзнз",
"4273 Курочкин А. А. 3433 знзнн",
"4272 Козлов И. И. 4443 ззззн"
]
我仍然有char *student_list
的2个功能。
我使用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
答案 0 :(得分:1)
使用swscanf而不是sscanf l。是相同的功能,但它接受广泛的字符。
答案 1 :(得分:1)
这取决于使用哪种数据格式来存储student_list
中的字符:
wchar_t
,则应使用swscanf()
; test
将wchar_t
转换为mbstowcs()
。UPD(如您的示例所示):
student_list
应该有wchar_t
,而不是char
。
要使mbstowcs()
工作(此功能取决于区域设置),您需要调用:
setlocale(LC_ALL, "");