【问题标题】:Trouble with loops - repeats the instruction twice instead of only once [duplicate]循环问题-重复指令两次而不是仅一次[重复]
【发布时间】:2018-11-20 22:59:46
【问题描述】:

在这里学习C,我很困惑。

char ch;

for(;;)
{
    puts("Type a letter: ");
    ch=getchar();
    if(ch == '~')
    {
        break;
    }
}

为什么它会打印两次而不是一次?程序运行时是这样的:
输入一个字母:
a
输入一个字母:
输入一个字母:
d
输入一个字母:
输入一个字母:
g

PS 同样的事情也发生在 while 循环中。

【问题讨论】:

标签: c loops for-loop char break


【解决方案1】:

您按“a”,然后按换行符(回车)。因此,您的代码将“a”作为第一个输入,将换行符作为第二个输入。所以它打印了两次。 你可以试试这个:

char ch;

for(;;)
{
    puts("Type a letter: ");
    ch=getchar();
    getchar(); //newly added line. This line will discard the newline
    if(ch == '~')
    {
        break;
    }
}

【讨论】:

  • 啊,有道理。但是如果用户输入超过 2 个字母然后按回车键会怎样。这样你的代码就不能很好地工作,因为它只检查第一个字母之后的输入,在这种情况下,是返回/输入键。
  • 是的,实际上我们应该根据输入的方式编写程序。如果您在输入后不按任何空格/输入,那么您的代码将起作用。但是,如果您想在每次输入后都按这些键,那么您需要一种方法来丢弃多余的字符。
  • 这个答案不应该被接受吗?
  • 如果用户只输入“Enter”会发生什么?另外:char ch; 应该是 int ch; 以匹配来自 getchar() 的返回值。认为一个字符是char 是新手的错误,这可以从printf("%zu\n", sizeof 'A') 的输出中看出,在我的32 位int 机器上是4
  • 在哪个节目上? @AbBe 的还是我的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 2018-11-27
相关资源
最近更新 更多