我正在MacBook上用C编写一个使用Mojave的程序,我正在尝试使用fgets((从stdin获取字符串。
我的代码编译 - 唯一的问题是,当我在终端中运行程序时,在调用 fgets(( 并输入所需的输入后,我无法弄清楚如何发出输入结束的信号,以便程序可以继续运行。
我知道很多人都有这个问题,并且这个网站上有很多页面解决了这个问题。但是(我所理解的(解决方案都不适合我。我已经读过这个和这个,但这些都没有帮助。
我已经查看了 fgets(( 的文档,其中说:
"fgets(( 从流中最多读入一个小于大小的字符,并将它们存储到 s 指向的缓冲区中。 读取在 *EOF* 或换行符后停止。如果读取换行符,则会将其存储到缓冲区中。终止空字节 (\0( 存储在缓冲区中最后一个字符之后。
在终端中输入"stty all"表明EOF确实对应于^D。我尝试输入^D两次,三次,按回车然后^D,^D然后回车,等等。似乎什么都不起作用。
我做错了什么?以下是代码的相关部分(最初来自此处,在"指向包含指针的结构的指针"部分下(:
#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;
}
你不测试fgets()
的返回值:如果你确实从终端发出文件结束的信号,那么对fgets()
的后续调用将返回NULL
,目标数组将保持未初始化状态。
代码中没有任何内容会阻止文件末尾的程序操作。只需在每条输入后按回车键即可。为什么你认为你需要发出文件结束的信号?