c-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;
}

输出为:

(12)3 4 4(5 5

应该是:

(1 2(3 4(5

我做错了什么?

1)使用int j; fgets()返回一个unsigned charEOF 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;
    }
}

相关内容

  • 没有找到相关文章

最新更新