Я пишу программу на C на своем MacBook, которая использует Mojave, и я пытаюсь использовать fgets (), чтобы получить строку из stdin.
Мой код компилируется - единственная проблема заключается в том, что когдаЯ запускаю программу в терминале, после вызова функции fgets () и ввода нужного ввода я не могу понять, как сигнализировать о конце ввода, чтобы программа могла продолжить работу.
Я признаю, что у многих людей была эта проблема, и на этом сайте есть много страниц, посвященных ее решению.Но ни одно из решений (которые я понял) не сработало для меня.Я прочитал это и это , но это не помогает.
Я проверил документацию для fgets (), которая гласит:
"fgets () считывает из потока не более одного размера символов меньше размера и сохраняет их в буфере, указанном s. Чтение останавливается после * EOF * или новой строки. Если читается новая строка, этосохранен в буфере. Завершающий нулевой байт (\ 0) сохраняется после последнего символа в буфере. "- с этой страницы .
Ввод 'stty all' в терминале показывает, что EOF действительно соответствует ^ D.Я пытался ввести ^ D дважды, три раза, нажимая Enter, затем ^ D, ^ D, затем Enter и т. Д. И т. Д. Кажется, ничего не работает.
Что я делаю не так?Вот соответствующий бит кода (первоначально от здесь , в разделе «Указатели на структуры, содержащие указатели»):
#include <stdio.h>
typedef struct
{
char name[21];
char city[21];
char phone[21];
char *comment;
} Address;
int main(void)
{
Address s;
char comm[100];
fgets(s.name, 20, stdin);
fgets(s.city, 20, stdin);
fgets(s.phone, 20, stdin);
fgets(comm, 100, stdin);
return 0;
}