#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 Compiler (TCC) и запустил исполняемый файл в командной строке Windows XP (cmd.exe
).
Проблема, которая возникаетимеет отношение к символу EOF
.При запуске, если я ввожу символ EOF
(CTRL+Z
) и затем нажимаю return, цикл, кажется, завершается правильно, но затем character
заполняется символом новой строки (\n
).
Итак, что-то вроде этого (в качестве ввода):
test^Ztesttwo
Будет выводить:
test\n
Из-за того, что if statement
после for loop
всегда выполняется.Мне интересно, почему цикл успешно завершается после распознавания символа EOF
, если он продолжает захватывать другой символ из потока?