为什么我不能fscanf()两个不同的文件并在一段时间内同时获得输入?

Hoo*_*lum 2 c text file scanf

会发生什么,它首先从fp1获取所有输入,然后从fp2获取输入.为什么会那样?你不能在while语句中同时从2个不同的文件指针获得输入吗?

/*checks if 2 text files are identical */
#include <stdio.h>
int main(void)
{
    FILE *fp1,*fp2;
    char buf1,buf2;
    int flag = 1;
    fp1 = fopen("textfile1.txt","r");
    fp2 = fopen("textfile2.txt","r");
    /* putting them inside a while statement causes a logical error? why */
    while(fscanf(fp1,"%c",&buf1) == 1 ||fscanf(fp2,"%c",&buf2) == 1)
    {
        printf("buf1: %c, buf2: %c\n",buf1,buf2);
        if(buf1 != buf2)
        {
            flag = 0;
            //break;
        }
    }
    if(flag == 1)
        printf("SAME");
    else
        printf("NOT SAME");
    fclose(fp1);
    fclose(fp2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

goj*_*oji 6

你的while语句是短路的.使用OR(||)运算符时,如果第一个表达式为true,则第二个表达式不会被执行.

我不完全确定你想用OR(||)运算符实现什么,也许你真的需要一个AND(&&)?


int*_*jay 5

您使用了||运营商,因此只有一个fscanf呼叫成功.这也意味着,只有的一个buf1,buf2变量将有一个有效的价值.

如果要从两个文件中读取,请使用&&运算符:

while (fscanf(fp1,"%c",&buf1) == 1 && fscanf(fp2,"%c",&buf2) == 1)
Run Code Online (Sandbox Code Playgroud)

请注意,即使一个文件比另一个文件长,您的代码也可能认为这两个文件相同.为防止这种情况,您需要检查两个fscanf呼叫是否同时失败.