我可以在文件中使用SCANF,然后使流返回一个位置吗?

时间:2019-10-24 20:27:22

标签: c

我有问题。我有两个文件测试。假设两个文件名都是“文件”。

我要对两个文件进行测试,其中一个是这样的:

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;
}

2 个答案:

答案 0 :(得分:0)

使用循环而不是额外的scanf()来检查是否到达末尾。

while (fscanf(fp, "%d %d", &Head, &Arms) == 2) {
    ...
}

答案 1 :(得分:0)

如果您使用的是可搜索文件,则可以使用ftell存储当前位置,然后尝试读取下一个数字-如果scanf成功,则fseek返回由{返回的位置{1}}并调用该函数。

如果您只是从通用流中读取内容,则可能会向前窥视一个字符。即您可以使用ftell格式的 end 处的空格来占用空白,然后尝试使用*scanf / fgetc getchar读取另一个字符ungetc`将其推回流中。