0
#include <stdio.h>
#define MAXLENGTH 77
int getline(char[], int);
main() {
char in_line[MAXLENGTH];
int count, in_line_length;
in_line_length = 0;
for (count = 0; count < MAXLENGTH; ++count)
in_line[count] = 0;
in_line_length = getline(in_line, MAXLENGTH);
printf("%s", in_line);
}
int getline(char line[], int max_length) {
int count, character;
character = 0;
for (count = 0; count < (max_length -2) && (character = getchar()) != EOF && character != '\n'; count++) {
line[count] = character;
}
if (character = '\n') {
line[count++] = '\n';
}
line[count] = '\0';
return count;
}
我在上面的代碼中遇到了一個特殊的問題。作爲一個小背景,我正在使用Tiny C編譯器(TCC)編譯上述C代碼,並在Windows XP命令提示符下運行可執行文件(cmd.exe
)。爲什麼不能正確解釋文件結束符?
似乎發生的問題與EOF
字符有關。在運行時,如果我發出EOF
字符(CTRL+Z
),然後按回車,循環似乎正確退出,但character
填充了換行符(\n
)。
所以,這樣的事情(輸入):
test^Ztesttwo
將輸出:
test\n
由於事實if statement
繼for loop
總是執行。我想知道的是,爲什麼循環在識別EOF
字符時成功退出,如果它繼續抓取流中的另一個字符?
非常感謝幫助rsp! – bfisher 2011-04-13 14:48:41