我试图创建一个程序来计算文件中的行,并将特定行称为另一个计数(即不应计算以#开头的行)
while(fgets(tempstring,sizeof(tempstring),fptr)){
lines++;
if(tempstring[0] != '#' || tempstring[0]!='\n'|| tempstring[0]!=' '){
++count;
}
现在我在这里做错了什么?
另外我注意到第一次调用fgets时我得到∩
作为tempstring[0]
的输出,为什么会这样?
答案 0 :(得分:2)
您的情况始终如此 - 您要使用&&
,要么否定整体||
:
if (tempstring[0] != '#' && tempstring[0]!='\n' && tempstring[0]!=' ')
或
if(!(tempstring[0] == '#' || tempstring[0] == '\n' || tempstring[0] == ' '))
相当于。请注意,您可以完全删除if
,因为C中的true
与1
相同:
count += (tempstring[0] != '#' && tempstring[0]!='\n' && tempstring[0]!=' ');
另请注意,fgets
可能会也可能不会为您提供行首,具体取决于sizeof(tempstring)
。如果tempstring
对于文件中的整个字符串不够长,则您的调用可能会从另一个字符串的中间生成一个字符串,从而导致错误的行为。这很难修复,因为现在您需要一个循环来检查从fgets
返回的字符串的 last 字符为'\n'
。