首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何查找scanf没有任何输入

如何查找scanf没有任何输入
EN

Stack Overflow用户
提问于 2018-06-02 23:51:07
回答 1查看 45关注 0票数 -2

我正在尝试寻找一种方法来结束程序,如果用户没有输入scanf()就按enter键。我尝试过不同的方法,但都不管用。我使用了下面的代码

代码语言:javascript
复制
int main()
{
    char line[40];
    while (1)
    {
         scanf("%s",line);
         if (line == NULL)
         {
              break;
          }
     }
      return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-03 00:07:12

你可能不能单独使用scanf来做你想做的事情。

显而易见的答案是查看scanf的返回值,因为它会告诉您它成功匹配了多少项:

代码语言:javascript
复制
while(1) {
    int r = scanf("%s", line);
    if (r < 1) {
          break;
    }

    printf ("you typed %s\n", line);
}

但是,由于scanf%s格式跳过了前导空格,并且换行符\n是空格,因此scanf将愉快地遍历空行,直到找到要返回的非空白字符。

您也许能够在scanf中使用%[]格式。这匹配一个字符类:某些字符,或者(使用^)除某些字符之外的所有字符。你可以这样使用它:

代码语言:javascript
复制
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会更整洁、更容易:

代码语言:javascript
复制
while(1) {
    if(fgets(line, 40, stdin) == NULL) {
          break;
    }

    printf ("you typed %s\n", line);
}

(使用fgets确实有一个额外的复杂性,即终止\n字符从line数组中的fgets返回,因此根据您稍后要做的事情,您可能必须采取措施将其删除。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50658610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档