我有问题。我有两个文件测试。假设两个文件名都是“文件”。
我要对两个文件进行测试,其中一个是这样的:
1 2
另一个是:
1 2
2
4
3
6
我想要做的是读取文件并保存编号并进行测试。因此,如果有2个数字,它将保存2个数字并在数字中进行TEST并关闭文件,但是如果文件中有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;
}
答案 0 :(得分:0)
使用循环而不是额外的scanf()
来检查是否到达末尾。
while (fscanf(fp, "%d %d", &Head, &Arms) == 2) {
...
}
答案 1 :(得分:0)
如果您使用的是可搜索文件,则可以使用ftell
存储当前位置,然后尝试读取下一个数字-如果scanf成功,则fseek
返回由{返回的位置{1}}并调用该函数。
如果您只是从通用流中读取内容,则可能会向前窥视一个字符。即您可以使用ftell
格式的 end 处的空格来占用空白,然后尝试使用*scanf
/ fgetc getchar
读取另一个字符ungetc`将其推回流中。