【问题标题】:do while not execution, terminates unexpectedly [duplicate]不执行时执行,意外终止[重复]
【发布时间】:2014-02-23 14:30:41
【问题描述】:

我有以下代码,如果按下除1 & 2 之外的任何键,我想终止while 循环。但只有do 执行一次。而不是while。为什么我的while condition 总是假的。请指导:

char a;

do
{
    printf("To Enter the Employee sales press 1 \n");
    printf("To Add more items press 2 \n ");
    printf("Press any key to Terminate \n\n");  

        scanf("%c", &a);
    if ( a == '1' )
    {
        printf("1 is presed ");
    }
    else if(a == '2')
    {
        int c;

        printf("entre Value:");
        scanf("%d",&c);
        printf("\n");
        addItem( &myArray, &size, c );
        printitems(myArray, size);   
    }
}while(a == '1' || a == '2');

编辑 很抱歉,它是在单个 qout 中。我忘了放最新的代码。即使使用 qoutes,它也不会运行 while。

【问题讨论】:

  • a == '1'...(单引号)?

标签: c loops if-statement logic


【解决方案1】:

scanf() 中的 %c 之前需要一个空格:

scanf(" %c", &a);

您正在读取输入的第一个字符并将一个字符留在缓冲区中。所以如果你输入:

'1' 你真的得到了两个字符,第一个是'1',然后是一个'\n'(一个“1”,然后是一个换行符,当你按下回车键时会发生这种情况)。所以它首先将'1' 存储到a 中,然后第二次它将剩余的换行符读入a,(它会“跳过”要求您输入)。由于'\n' 不等于'1' 或'2' 所以它正确退出。

在%c 之前添加空格告诉scanf() 忽略缓冲区中剩余的任何空格(并且换行符算作空格)

【讨论】:

  • 在我最疯狂的梦想中无法想象这一点。你的时间这么多。我,感觉很蠢。谢谢:)
【解决方案2】:

您已将 'a' 声明为 char 类型。而你的 while 条件是


而(a == 1 || a == 2);


应该是


while(a == '1' || a == '2');

【讨论】:

  • 检查您的 addItem 和 printitems 是否正常工作。如果不使用这两个功能,它可以完美地工作
猜你喜欢
  • 2018-03-03
  • 1970-01-01
  • 2013-08-10
  • 1970-01-01
  • 2020-05-19
  • 2020-01-21
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多