#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') {
당신은 일정하게 왼쪽을 넣어 이런하는 오류를 방지 할 수 있습니다, 당신은 것입니다 그런 식으로
감사합니다 rsp! – bfisher