昨天写了个c语言处理文件的练习题,题目是:

编写一个代开两个文件的程序。可以使用命令行参数或者请求用户输入来获取文件名。让程序打印第一个文件的第一行,第二个文件的第二行,第一个文件第一行,第二个文件第二行。。。以此类推,知道打印完行数较多的文件的最后一行。

程序很短很好写,但是在写程序的过程中我是通过逻辑或来判断是否两个文件都读完。

1
2
while(fgets(line1, SLEN, fp1) != NULL || fgets(line2, SLEN, fp2) != NULL)
{...}

可是这样输出的结果是先打印了第一个文件的所有行然后是第二个文件的所有行。
后来想了想,之所以出现这样的结果,有可能是逻辑运算符如果第一个条件满足后就不会运算||后面的表达式了。
于是我把代码改成如下:
1
2
3
4
5
6
7
8
9
pt1 = fgets(line1, SLEN, fp1);
pt2 = fgets(line2, SLEN, fp2);
while(pt1 || pt2)
{
fputs(line1, stdout);
fputs(line2, stdout);
pt1 = fgets(line1, SLEN, fp1);
pt2 = fgets(line2, SLEN, fp2);
}

果然是猜测的原因,以后用或运算符的时候要注意这里了。
以上。

Comments