不执行时,意外终止

时间:2014-02-23 14:30:41

标签: c loops if-statement logic

我有以下代码,如果按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,它也不会运行。

2 个答案:

答案 0 :(得分:2)

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

scanf(" %c", &a);

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

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

%c告诉scanf()之前添加空格以忽略缓冲区上留下的任何空白区域(新行字符计为空格)

答案 1 :(得分:1)

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


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


应该是


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