2011-04-13 8 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; 
} 

위의 코드와 관련하여 특이한 문제가 있습니다. 약간의 배경으로, 위의 C 코드를 Tiny C 컴파일러 (TCC)로 컴파일하고 Windows XP 명령 프롬프트 (cmd.exe)에서 실행 파일을 실행합니다.End-of-File 문자가 제대로 해석되지 않는 이유는 무엇입니까?

나타나는 문제는 EOF 문자와 관련이 있습니다. 실행 중일 때 EOF 문자 (CTRL+Z)를 실행 한 다음 리턴 키를 누르면 루프가 올바르게 종료 된 것으로 보이지만 character은 줄 바꿈 문자 (\n)로 채워집니다.

그래서, (입력으로)이 같은 :

test^Ztesttwo 

겠습니까 출력 :

test\n 

인해 for loop 다음 if statement 항상 실행된다는 사실이다. 왜 내가 스트림에서 다른 문자를 계속 잡으면 EOF 문자를 인식하면 루프가 성공적으로 종료되는지 궁금합니다.

if (character = '\n') { 

대신 테스트 연산자의의 할당은 다음과 같습니다 :

if (character == '\n') { 

당신은 일정하게 왼쪽을 넣어 이런하는 오류를 방지 할 수 있습니다, 당신은 것입니다 그런 식으로

답변

5

귀하의 문제는이 라인 실수를하면 컴파일러 오류가 발생합니다.

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

감사합니다 rsp! – bfisher

관련 문제