我正在尝试读取这个.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;
}
输出为:
(12)3 4 4(5 5
应该是:
(1 2(3 4(5
我做错了什么?
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;
使用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;
}
}