c - 我可以在文件中使用 SCANF,然后让流返回一个位置吗?
问题描述
我有个问题。我有两个文件测试。让我们假设两个文件名都是“文件”。
我将对这两个文件进行测试,其中一个是这样的:
1 2
另一个是:
1 2
2
4
3
6
我想要做的是读取文件并保存数字并测试它们。因此,如果有 2 个数字,它会保存 2 个数字并在数字中进行测试并关闭文件,但如果文件中有 4 个或 6 个或 8 个数字,我想重复我的函数 BODY 并且只关闭我的文件,直到没有剩下的号码。但是有一个问题,我使用条件IF(fscanf(fp, "%d", nova))
来检查是否还有任何东西,如果还有数字,我会扫描一个应该在变量 HEADS 中的数字。
我想要做的是检查除了前两个之外是否还有更多数字,如果有,我想再次启动我的函数并且不因为 fscanf 条件而跳过一个数字。
int Body(){
int Head, Arms;
int nova;
FILE *fp;
fp=fopen("file", "r");
fscanf(fp, "%d", &Head);
fscanf(fp, "%d", &Arms);
test(head, arms);
if(fscanf(fp, "%d", &nova)==EOF) fclose(fp);
else ....
return 0;
}
解决方案
使用循环而不是额外的循环scanf()
来检查您是否已到达终点。
while (fscanf(fp, "%d %d", &Head, &Arms) == 2) {
...
}
推荐阅读
- firebase - Flutter - Flutter 上的 Firebase 实时数据库 - 用户通过身份验证后拒绝“auth!= null”权限
- android - Android P 中的 MatrixCursor 实现是否发生了变化?
- javascript - 有一个javascript对象数组作为ajax调用参数,没有jquery?
- java - 如何使用 Java 在浏览器上显示图像?
- javascript - 如何优化/安排具有很多功能的浏览器库的范围?(好习惯)
- perl - 列中的重复值
- python - '连接中止。',错误(104,'连接被对等方重置')
- ios - Objective-C:ActionSheet 关闭键盘?
- .net - 终止GracePeriodSeconds 不是
- python - 从 div 标签内的 span 标签中提取数据