c - 带有整数和字符的 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);
解决方案
代替
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;
}
}
注意:使用 \ 而不是 / 表示分数很奇怪
推荐阅读
- javascript - 来自mysql数据库的PHP动态图表数据
- html - 为什么我的 html 图像 scr 搜索的是 url 而不是我的目录?
- visual-studio - unity Camera 垂直滚动效果
- java - SASL_SSL 安全协议如何工作?客户端是否验证服务器(X.509 证书)?
- android - 有没有一种有效的方法将 Firebase 数据存储在 arraylist 中然后读取它?
- bash - 在 IFS 命令后读取时,奇怪的错误值对于基础来说太大了
- deserialization - YamlDotNet 可以反序列化为动态对象图吗?
- reactjs - 数据未在 Material UI DataGrid 中加载 - React
- arrays - 使用mergesort对数组进行排序得到stackoverflow
- swift - swiftui 致命错误:尝试创建没有子图的属性