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, "");