代码之家  ›  专栏  ›  技术社区  ›  Nick

C-printf和scanf-如何终止输入?

  •  2
  • Nick  · 技术社区  · 15 年前

    我正在用C编写一个简单的应用程序。我在一个Unix环境中工作。

    我的应用程序正在做一些简单的I/O。我使用printf提示用户输入,然后使用scanf获取输入。

    问题是,我不知道如何告诉我的应用程序我已经准备好在输入一个值后继续。键入“enter”提供了一个新行“n”,这很有意义。control-d允许scanf捕获我的输入,但似乎忽略了任何随后的scanf指令。

    有人能帮我吗?

    printf("Enter name\n");
    scanf("%s",input);
    printf("%s",input);
    
    printf("enter more junk\n")
    scanf("%s",morestuff); /* cntrl+d skips this*/
    
    2 回复  |  直到 15 年前
        1
  •  4
  •   Community CDub    8 年前

    检查返回值 scanf() . 一旦它得到了EOF(作为您输入的结果 文件结束符 ,每次都会失败,直到您清除错误。

    小心使用 SCAN() 我发现在现实世界中使用它太难了,因为它不能让我控制我认为需要的错误处理。我建议使用 fgets() 或相当于读取数据行,然后使用 sscanf() -一个更文明的函数——解析数据。

    另请参见一个松散相关的问题: SO 3591642 .

        2
  •  -1
  •   babbitt    15 年前

    [编辑:这个答案不正确,正如我下面所说,我也在学习]

    你试过ctrl-z吗?

    这会将eof发送到scanf,根据它的手册页,scanf将移动到下一个字段。因为您只输入了一个字符串作为输入格式,所以应该终止scanf。

    我现在不能测试这个,但你可以试一试。

    手册页在这里:

    http://www.slac.stanford.edu/comp/unix/package/rtems/doc/html/libc/libc.info.scanf.html