我正在尝试阅读此.txt文件:
(1 2(3 4)(5
使用此代码:
#include <stdio.h>
int main() {
FILE* f = fopen("teste.txt", "r");
int i;
char j;
while (feof(f) == 0){
fscanf(f, "%c", &j);
switch (j) {
case '(':
printf("%c ", j);
break;
default:
ungetc(j,f);
fscanf(f, "%d", &i);
printf("%d ", i);
break;
}
}
return 0;
}
输出结果为:
(1 2 2(3 4 4(5 5)
应该是:
(1 2(3 4)(5
我做错了什么?
答案 0 :(得分:1)
1)使用int j;
fgets()
返回unsigned char
或EOF
257个不同的值。使用char
丢失信息。
2)不要使用feof()
// while (feof(f) == 0){
// fscanf(f, "%c", &j);
while (fscanf(f, " %c", &j) == 1) { // note space before %c
3)测试fscanf()
返回值
// fscanf(f, "%d", &i);
if (fscanf(f, "%d", &i) != 1) break;
答案 1 :(得分:0)
使用fgetc
代替fscanf
,试试这个
#include <stdio.h>
int main() {
FILE* f = fopen("teste.txt", "r");
int i;
char j;
char t;
while (feof(f) == 0){
j = fgetc(f);
switch (j){
case '(':
printf("%c ", j);
break;
default:
ungetc(j,f);
t = fgetc(f);
i = atoi(&t);
printf("%d ", i);
break;
}
}