【问题标题】:'printf' followed by 'scanf' requires pressing ENTER key twice to accept input'printf' 后跟 'scanf' 需要按两次 ENTER 键才能接受输入
【发布时间】:2013-07-12 16:45:53
【问题描述】:

我是 C 编程的初学者,我有一个问题。我举一个简单的代码为例:

#include <stdio.h>

int main( void )
{
    int x;
    printf( "Please type the number 10." );
    scanf( "%i\n", &x );

    if ( x == 10 )
        printf( "Thank you!\n" );


    return 0;
}

正如预期的那样,当我编译并运行这个程序时,我的终端显示消息:

"Please type the number 10."

然后它等待输入,所以我输入它要求输入的数字 (10),然后按 ENTER。问题是,在我按一次 ENTER 后,它会移动到新行并等待更多输入。只有在输入 10 并再次按 ENTER 后,它才会真正继续(...显示“谢谢!”)。

看来我必须按两次 ENTER 才能接受我的输入。有谁知道为什么会这样?

【问题讨论】:

  • 你确定它只发生在printf之后吗?
  • 改成scanf( "%i", &amp;x );(没有\n)

标签: c


【解决方案1】:

这是您对scanf 的调用中的“\n”。删除它,scanf 将在扫描您请求的整数值后返回。

注意:这与 scanf 调用前面是 printf 的事实无关。

【讨论】:

    【解决方案2】:

    实际上scanf 不会发出提示,如果您包含除格式说明符以外的任何内容,那么您必须输入不正确的输入,这就是您需要再次按 ENTER 的原因。 p>

    改变这个:

    scanf( "%i\n", &x );
            // ^
            // |  remove extra \n 
    

    到这里:

    scanf( "%i", &x );
    

    【讨论】:

    • 是的,我删除了 '\n' 并解决了问题。非常感谢!
    • 既然我们是来学习的,我想我也可以稍微纠正一下你,以回报你;是全心全意,不是全心全意:)
    • @user2577148 哈哈我知道,但实际上我分别写了“完整”和“全心”,这就是为什么它带有红色下划线。无论如何,感谢您的更正,是的,我们衷心欢迎您:) :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2019-11-06
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多