我正在尝试寻找一种方法来结束程序,如果用户没有输入scanf()就按enter键。我尝试过不同的方法,但都不管用。我使用了下面的代码
int main()
{
char line[40];
while (1)
{
scanf("%s",line);
if (line == NULL)
{
break;
}
}
return 0;
}
发布于 2018-06-03 00:07:12
你可能不能单独使用scanf
来做你想做的事情。
显而易见的答案是查看scanf
的返回值,因为它会告诉您它成功匹配了多少项:
while(1) {
int r = scanf("%s", line);
if (r < 1) {
break;
}
printf ("you typed %s\n", line);
}
但是,由于scanf
的%s
格式跳过了前导空格,并且换行符\n
是空格,因此scanf
将愉快地遍历空行,直到找到要返回的非空白字符。
您也许能够在scanf
中使用%[]
格式。这匹配一个字符类:某些字符,或者(使用^
)除某些字符之外的所有字符。你可以这样使用它:
while (1) {
int r = scanf("%[^\n]", line);
if (r < 1) {
break;
}
printf ("you typed %s\n", line);
getchar(); /* over the \n */
}
由于您告诉scanf
读取除\n
之外的所有内容,因此您必须执行其他操作--这里是一个纯getchar
调用--以跨越\n
,以便您可以读取下一行。
但是如果你想读行,通常使用fgets
会更整洁、更容易:
while(1) {
if(fgets(line, 40, stdin) == NULL) {
break;
}
printf ("you typed %s\n", line);
}
(使用fgets
确实有一个额外的复杂性,即终止\n
字符从line
数组中的fgets
返回,因此根据您稍后要做的事情,您可能必须采取措施将其删除。)
https://stackoverflow.com/questions/50658610
复制相似问题