首页 > 解决方案 > 带有整数和字符的 fscanf 格式

问题描述

我必须读取一个文件并获取分数(分子、分母和数学符号)
这是输入文件:

1\4 + 1\3
2\5 - 6\13

我的部分代码:

int numer1[100], numer2[100], denom1[100], denom2[100];
char ope[100];
do{
    checkScan = fscanf(fin, "%d %d %s %d %d", &numer1[line], &denom1[line], &ope[line], &numer2[line], &denom2[line]);
    printf("%d %d %s %d %d\n", numer1[line], denom1[line], ope[line], numer2[line], denom2[line]);
    if(checkScan==EOF){
        printf("End of file\n");
        break;
    }
    if(checkScan!=5){
        printf("Not enough data or invalid data\n");
    }
    line++;
}while(1);

标签: c

解决方案


代替

checkScan = fscanf(fin, "%d %d %s %d %d", &numer1[line], &denom1[line], &ope[line], &numer2[line], &denom2[line]);

经过

checkScan = fscanf(fin, "%d\\%d %c %d\\%d", &numer1[line], &denom1[line], &ope[line], &numer2[line], &denom2[line]);

补充说明:

  • checkScan==5您还需要仅在您不知道要打印什么时才执行 printf

  • 您还需要仅在输入正常时才增加

  • 你需要检查line < 100

  • 如果输入字符串不遵循模式,您将无限循环。我鼓励您先阅读该行,然后再对其进行解析。

累积我所有的评论:

char readLine[100];
int numer1[100], numer2[100], denom1[100], denom2[100];
char ope[100];

while (fgets(readLine, sizeof(readLine), fin)) {
  int checkScan = sscanf(readLine, "%d\\%d %c %d\\%d", &numer1[line], &denom1[line], &ope[line], &numer2[line], &denom2[line]);

  if(checkScan!=5){
    printf("Not enough data or invalid data\n");
  }
  else {
    printf("%d %d %c %d %d\n", numer1[line], denom1[line], ope[line], numer2[line], denom2[line]);
    if (++line == 100)
      break;
  }
}

注意:使用 \ 而不是 / 表示分数很奇怪


推荐阅读