【发布时间】:2019-03-18 14:03:06
【问题描述】:
我正在使用 Mojave 的 MacBook 上用 C 语言编写程序,并且我正在尝试使用 fgets() 从标准输入中获取字符串。
我的代码可以编译 - 唯一的问题是,当我在终端中运行程序时,在调用 fgets() 并输入所需的输入之后,我不知道如何发出输入结束的信号,所以程序可以继续运行。
我知道很多人都遇到过这个问题,而且这个网站上有很多页面都在解决这个问题。但是没有一个解决方案(我理解的)对我有用。我读过this 和this 但这些都没有帮助。
我查看了 fgets() 的文档,上面写着:
"fgets() 从流中最多读入一个小于 size 的字符,并将它们存储到 s 指向的缓冲区中。在 *EOF* 或换行符之后停止读取。如果读取换行符,则将其存储到缓冲区。终止的空字节 (\0) 存储在缓冲区中的最后一个字符之后。” - 来自this page。
在终端输入'stty all'表明EOF确实对应于^D。我试过输入 ^D 两次、三次,按 Enter 然后 ^D、^D 然后 Enter 等等。似乎没有任何效果。
我做错了什么?这是代码的相关位(最初来自here,在“指向包含指针的结构的指针”部分下):
#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;
}
【问题讨论】: