Я использую модифицированную функцию fgets () под названием s_gets (), которая удаляет новую строку из ввода или удаляет любой из оставшихся символов во входном буфере.Это выглядит следующим образом:
char *s_gets(char *str, int n, FILE *pf) {
char *ret_val;
char *find;
ret_val = fgets(str, n, pf);
if (ret_val) {
find = strchr(str, '\n');
if (find) {
puts("Newline was found.");
printf("Character before \\n is %c\n", *(find - 1));
*find = '\0';
} else {
while (getchar() != '\n')
continue;
}
}
return ret_val;
}
Когда я использую эту функцию и передаю ей FILE*
в файл, содержащий только строку apple
в одной строке, puts()
внутри предложения ifвыполняется и оператор printf()
печатает Character before \n is e
.Мой вопрос: откуда этот таинственный перевод строки?Это как-то связано с EOF?Я компилирую это с Apple LLVM версии 10.0.0 (clang-1000.10.44.2) на macOS 10.14.