如何找到scanf没有任何输入
我正在试图找到一种方法,如果用户在scanf()中没有输入的情况下按enter键,则结束程序。我尝试过不同的方法,但都不管用。 我用了这个密码如何找到scanf没有任何输入,c,C,我正在试图找到一种方法,如果用户在scanf()中没有输入的情况下按enter键,则结束程序。我尝试过不同的方法,但都不管用。 我用了这个密码 int main() { char line[40]; while (1) { scanf("%s",line); if (line == NULL) { break; } } return 0; } 你有
int main()
{
char line[40];
while (1)
{
scanf("%s",line);
if (line == NULL)
{
break;
}
}
return 0;
}
你有没有读过的文档?它返回您应该测试的扫描项目计数 在执行
scanf
之前,您应该考虑使用memset(line,0,sizeof(line))
清除行
并且您不能将字符串与==
(这测试地址是否相等)进行比较。您可以使用(但不能使用NULL
,但可以使用空字符串“
)
此外,您的问题可能是特定于操作系统的。因为终端的概念是特定于操作系统的(例如,有关Unix的观点,请参见)。C11标准不知道或不关心终端或输入键。而且(例如,scanf
读取的stdin
)可能不是终端(想想or),因此您的问题一般没有任何意义
当然,您应该阅读函数文档,使用所有警告和调试信息编译代码(sogcc-Wall-Wextra-g
with),然后了解程序的行为
您可以(也可能应该)使用(但别忘了针对失败测试其结果)。如果你的系统有它们,你可能会考虑使用或甚至.你可能无法做到你想用<代码> SCANF单独。< /P>
显而易见的答案是查看scanf
的返回值,因为这会告诉您它成功匹配了多少项:
while(1) {
int r = scanf("%s", line);
if (r < 1) {
break;
}
printf ("you typed %s\n", line);
}
由于您要告诉scanf读取除\n
之外的所有内容,因此您必须执行其他操作—这里是一个简单的getchar
调用—来跳过\n
,以便阅读下一行
但如果您想阅读行,通常使用fgets
会更简洁、更容易:
while(1) {
if(fgets(line, 40, stdin) == NULL) {
break;
}
printf ("you typed %s\n", line);
}
(使用
fgets
时,您确实会遇到另一个复杂问题,即终止的\n
字符从行中的fgets
返回,因此,根据您以后的操作,您可能需要采取步骤将其删除。)如果行
是一个数组,那么测试行==NULL
是没有意义的。缺少#在您的代码中包含
用if(scanf(“%s”,line)==0)break替换scanf语句;
while(1) {
if(fgets(line, 40, stdin) == NULL) {
break;
}
printf ("you typed %s\n", line);
}