2011-04-13 58 views
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 statementfor loop總是執行。我想知道的是,爲什麼循環在識別EOF字符時成功退出,如果它繼續抓取流中的另一個字符?

回答

5

你的問題是這樣的一行:

if (character = '\n') { 

它是一個分配新建分配FY而不是測試操作:

if (character == '\n') { 

您可以防止這樣的誤差修改通過將不斷左側,這樣,你就如果你犯了一個錯誤,會得到一個編譯錯誤。

if ('\n' = character) { 
//  ^wont compile 
+0

非常感謝幫助rsp! – bfisher 2011-04-13 14:48:41

相關問題