如何解决使用 fgets() 从 stdin 输入多行
我正在尝试输入这样的内容
line 1
this is line 2
now line 3
使用 fgets 和来自用户的标准输入
我的片段:
char *line;
while ((line = fgets(text,BUF_SIZE,stdin)) != NULL) {
//save and process line
但是,在运行时,我一直停留在标准输入,直到我按 Ctrl+C 强制退出。
我如何使用这个检查 2-enter 键又名“\n”?以便代码可以继续“从标准输入部分读取”之后的下一行
我愿意使用 getc 或 getline() 如果这是一个更简单的解决方案。
解决方法
fgets 在到达文件末尾标记(即 EOF)时返回 NULL。但是,与标准文本文件不同,stdin 不会自动遇到 EOF 标记,因为没有预先指定的文件结束位置,会像标准文本文件一样自动运行。如果要将文件结束标记发送到 stdin,则必须键入每个操作系统独有的命令。例如,在 Windows 上,您输入 Crtl-Z 以将 EOF 发送到 stdin。任何时候遇到类似问题时,请尝试查找您正在使用的函数的文档(在本例中为 fgets)。
此外,无需将 fgets 的返回值保存到“行”中。您可以直接将函数的返回值与 NULL 进行比较,如
while (fgets(text,BUF_SIZE,stdin) != NULL) {
// do stuff
}
,
您可以检查 '\n' 并中断 while 循环 你的 while 循环应该是这样的
while ((line = fgets(text,100,stdin)) != NULL) {
if(text[0] == '\n'){
break;
}
/* do your work here */
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。