fscanf и переключатель не работают
Я пытаюсь прочитать этот файл.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
Что я делаю неправильно?
2 ответа
Решение
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;
}
}