为什么if条件没有被执行?

时间:2017-02-18 13:24:16

标签: c loops if-statement while-loop do-while

这是一个菜单驱动程序,要求用户选择。 为什么条件没有执行? 输出已附加。 创建一个询问用户输入的程序:

void main()
{  
    float a,b,ans=0;char ch,choice;


    choice='y';

    while(choice=='Y'||choice=='y')
    {


        printf("Enter two numbers \n");
        scanf("%f %f",&a,&b);
        printf("1.+for Addition\n");
        printf("2.-for subtraction \n");
        printf("3.*for multiplication \n ");
        printf("4./for Division \n");
        printf("Enter your choice of operation \n");
        scanf("%c",&ch);

        if(ch=='+')
            ans=a+b;
        else if (ch=='-')
            ans=a-b;
        else if(ch=='*')
            ans=a*b;
        else if(ch=='/')
            ans=a/b;
        else
        {
            printf("wrong choice entered\n");
        }
        printf("Answer is %f \n",ans);
        printf("Do you want to coninue (Y/N)\n");
        scanf("%c",&choice);
    }

    printf("program Terminated\n");
}

输出:

/* Enter two numbers
   1010
   22
   1.+for Addition
   2.-for subtraction
   3.*for multiplication
   4./for Division
   Enter your choice of operation
   wrong choice entered
   Answer is 0.000000
   Do you want to coninue (Y/N)
   n
   program Terminated
 */

以上是输出屏幕。 它没有执行操作。

3 个答案:

答案 0 :(得分:1)

尝试以下

scanf(" %c",&ch);
      ^^

scanf(" %c",&ch);
      ^^

否则读取下一个可以是空白字符的字符。

考虑到根据C标准函数main,没有参数应声明为

int main( void )

答案 1 :(得分:1)

当您输入前2个数字时,它们将被放入变量a和b中。但输入这两个数字后,按下回车键。计算机将其视为新输入并将其放在第一个需要输入的下一个适当变量中。在这种情况下,它是你的变量ch,而不是+, - ./或*,ch的值为“new line”。如果您尝试将标准输出上的ch值写为整数,它将写入数字10.它是新行的ASCII字符。只需在输入前2个数字后添加getchar()即可收集新的行号,然后您的下一个scanf将正常运行。

顺便说一句,您上次输入scanf("%c",&choice);时遇到同样的问题,因为在上次操作决定后按Enter键也会导致程序无法正常工作。对此部分执行相同的操作,或者只在%c之前留下空白字符。

答案 2 :(得分:0)

scanf()不消耗尾随换行符。跳过的scanf()从用户输入的前一行接收换行符,并在没有收到更多输入的情况下终止,如您所期望的那样......

scanf()对于换行有点麻烦。一个可能的解决方案是使用fgets()从控制台获取一行,然后使用sscanf()来解析收到的字符串。

另一个更有针对性的解决方案是在最后一次scanf()调用的格式字符串中使用“%c”。 %c格式说明符本身不消耗前导空格,这就是它获取剩余换行符的原因,而不是用户键入的字符。