gpt4 book ai didi

c - 使用带有标准输入的 fgets() 作为输入 : ^D fails to signal EOF

转载 作者:太空宇宙 更新时间:2023-11-04 02:25:00 25 4
gpt4 key购买 nike

我正在我的 MacBook 上用 C 编写一个程序,它使用 Mojave,我正在尝试使用 fgets() 从 stdin 获取一个字符串。

我的代码可以编译——唯一的问题是,当我在终端中运行程序时,在调用 fgets() 并输入所需的输入后,我不知道如何发出输入结束的信号,所以程序可以继续运行。

我知道很多人都遇到过这个问题,而且这个网站上有很多页面都在解决这个问题。但是没有一个解决方案(据我所知)对我有用。我读过 thisthis但这些都没有帮助。

我已经查看了 fgets() 的文档,上面写着:

"fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an *EOF* or a newline. If a newline is read, it is stored into the buffer. A terminating null byte (\0) is stored after the last character in the buffer." - from 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;
}

最佳答案

您不测试 fgets() 的返回值:如果您确实从终端发出文件结束信号,则随后对 fgets() 的调用将返回NULL 并且目标数组将保持未初始化状态。

您的代码中没有任何内容可以阻止程序在文件末尾进行操作。只需在每次输入后按回车键。为什么您认为您需要发出文件结束信号

关于c - 使用带有标准输入的 fgets() 作为输入 : ^D fails to signal EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52794780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com