Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找到scanf没有任何输入_C - Fatal编程技术网

如何找到scanf没有任何输入

如何找到scanf没有任何输入,c,C,我正在试图找到一种方法,如果用户在scanf()中没有输入的情况下按enter键,则结束程序。我尝试过不同的方法,但都不管用。 我用了这个密码 int main() { char line[40]; while (1) { scanf("%s",line); if (line == NULL) { break; } } return 0; } 你有

我正在试图找到一种方法,如果用户在scanf()中没有输入的情况下按enter键,则结束程序。我尝试过不同的方法,但都不管用。 我用了这个密码

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),因此您的问题一般没有任何意义

当然,您应该阅读函数文档,使用所有警告和调试信息编译代码(so
gcc-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);
}