C语言 使用fgets()从stdin输入多行



我想输入这样的东西

line 1
this is line 2
now line 3

使用fgets和从用户stdin

我的片段:

char *line;
while ((line = fgets(text, BUF_SIZE, stdin)) != NULL) {
//save and process line

然而,在运行这个时,我被困在stdin,直到我按Ctrl+C强制退出。

我如何检查2-enter键aka 'n'使用这个?这样代码就可以继续到'read from stdin节'后面的下一行

我愿意使用getc或getline(),如果这是一个更简单的解决方案。

您可以检查'n'并中断while循环你的while循环应该像这样

while ((line = fgets(text, 100, stdin)) != NULL) {  
if(text[0] == 'n'){
break;
}
/* do your work here */
}

fgets到达文件结束标记即EOF时返回NULL。然而,与标准文本文件不同的是,stdin不会自动遇到EOF标记,因为没有像标准文本文件那样自动运行的预先指定的文件结束位置。如果要将文件结束标记发送到stdin,则必须键入每个操作系统独有的命令。例如,在windows上输入ctrl - z将EOF发送到stdin。当你遇到这样的问题时,试着查找一下你正在使用的函数的文档(在这个例子中是fgets)。

同样,也不需要将fgets的返回值保存到"line"中。您可以直接将函数的返回值与NULL进行比较,例如

while (fgets(text, BUF_SIZE, stdin) != NULL) {
// do stuff
}