我必须读取文件并获取分数(分子,分母和数学符号)
这是输入文件:
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);
答案 0 :(得分:1)
替换
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
您需要检查 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;
}
}
注意:使用\而不是/分数很奇怪
答案 1 :(得分:0)
您的 scanf 格式无效。
ope 是char类型,但是在 scanf 中,您需要一个c字符串(char *)。
如果要读取符号字符,则应使用%c 作为scanf的格式参数:
checkScan = fscanf(fin, "%d %d %c %d %d", &numer1[line], &denom1[line], &ope[line], &numer2[line], &denom2[line]);