我正在构建一个只能从命令行读取两个文件的程序但是当我尝试读取这两个文件时我无法读取其他文件我得到了分段错误。
char buffer[100], buffer2[100];
while (((fgets(buffer, sizeof(buffer), infp1)) && (fgets(buffer2, sizeof(buffer2), infp2))) != NULL)
{
if(buffer[0] == '#')
continue;
}
基本上上面的代码在读取第一个文件时会占用两个文件,然后到达#
的一行,它跳过它并继续到下一行。
答案 0 :(得分:1)
您的布尔表达式错误
while (((fgets(buffer, sizeof(buffer), infp1)) && (fgets(buffer2, sizeof(buffer2), infp2))) != NULL)
您无法将NULL
与{&&&运营商。
你做了什么
while (
(
(fgets(buffer, sizeof(buffer), infp1)) &&
(fgets(buffer2, sizeof(buffer2), infp2))
) != NULL
)
您比较了布尔表达式(a && b) != NULL
的结果,这是错误的。你提出了许多不必要的括号,很难看出会发生什么。
将其更改为
while( fgets(buffer, sizeof buffer, infp1) != NULL &&
fgets(buffer2,sizeof buffer2,infp2) != NULL)
它更具可见性。
彻底了解运算符优先级并删除所有不必要的括号,它在可读性方面有很大帮助。知道sizeof
和return
是运算符而不是函数将有助于不添加多余的parens。