无论语句是否为真,C语句中的if语句中的命令都会发生

时间:2013-12-07 01:35:08

标签: c

对于我正在编写的程序,我需要逐行读取文件并打印出文件中最长的行,以及该行的长度以及文件中的总行数。

我有这个:

char line[100];
char* longLine;
int count, longestLine, temp;

count=0;
longestLine=0;

while(fgets(line,100,inFile) != NULL) {
    temp=strlen(line);  
    if(temp > longestLine) {            
        longLine=line;
        longestLine=temp;
    }
    count++;
}
printf("Longest line: %sLength of longest line: %d characters\nTotal number of lines: %d\n",longLine, longestLine, count);

longestLine和count打印正确,但无论如何,longLine始终打印出文件的最后一行而不是最长行。使用print语句我已经确定while循环中的if语句仅在找到新的最长行时被调用,但longLine无论如何都会被更改。谁能告诉我我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:2)

问题是longLine是一个指针。你进入if然后设置longLine指向行...在下一个开始的时候已经改变了。我怀疑你打算做的是使用strcpy将行的内容复制到longLine中,否则,每次都通过循环。 longLine将始终指向当前评估的行。

答案 1 :(得分:1)

脚注,即使代码正常运行,您的代码也是错误的。您需要在使用之前将longestLine初始化为零。并非所有编译器都可以将其初始化为零 - 它可能包含垃圾。 Temp可能永远不会比longestLine中的垃圾大。