对于我正在编写的程序,我需要逐行读取文件并打印出文件中最长的行,以及该行的长度以及文件中的总行数。
我有这个:
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无论如何都会被更改。谁能告诉我我做错了什么?谢谢!
答案 0 :(得分:2)
问题是longLine是一个指针。你进入if然后设置longLine指向行...在下一个开始的时候已经改变了。我怀疑你打算做的是使用strcpy将行的内容复制到longLine中,否则,每次都通过循环。 longLine将始终指向当前评估的行。
答案 1 :(得分:1)
脚注,即使代码正常运行,您的代码也是错误的。您需要在使用之前将longestLine初始化为零。并非所有编译器都可以将其初始化为零 - 它可能包含垃圾。 Temp可能永远不会比longestLine中的垃圾大。