[英]Printf problem with Kernighan and Ritchie problem 1-17
在下面的代碼中(對於Kernighan和Ritchie的“ The C Programming Language”中的問題1-17,為什么它不打印最長的行(在底部)?
#include <stdio.h>
#define MAXLINE 1000
#define LONGLINE 10
int getLineLength(char line[], int maxline){
int i, c;
for(i = 0; i< maxline-1 && (c = getchar() != EOF) && c != '\n'; i++)
line[i] = c;
if(c == '\n') {
line[i] = c;
i++;
}
line[i] = '\0';
return i;
}
main() {
int len;
char line[MAXLINE];
while((len = getLineLength(line, MAXLINE)) > 0)
if(len > LONGLINE)
printf("The line was over the maxlength\n\t %s", line);
return 0;
}
在您的代碼中:
(c = getchar() != EOF)
這將被評估為(c = (getchar() != EOF))
,給出錯誤的結果。 您需要的是:
((c = getchar()) != EOF)
該程序從標准輸入中讀取,並打印該長消息,以表示比字符長10行的行。 行以“ \\ n”(換行符,ENTER)結尾。 如果通過管道輸入文件,則輸入以EOF結尾;如果手動輸入字符,則輸入以CTRL-C結尾。
我很驚訝這一切都奏效。 (c = getchar() != EOF)
一開始是完全錯誤的。 line[i] = c;
出現兩次。 而且我認為它在邊緣情況下很容易發生緩沖區溢出。
編輯:我看不到一個更早的答案,您似乎在for循環中缺少括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.