根据用户输入重复while循环

时间:2015-02-16 15:17:31

标签: c

#include<stdio.h>
void main(){
    char choice1,choice2;
    int a,b,c;
    while(choice1 != 'n'){
        printf("Enter + for addition:\n");
        printf("Enter - for substraction:\n");
        printf("Enter * for multiplication:\n");
        printf("Enter / for division:\n");
        scanf("%c",&choice2);
        printf("Enter two numbers:\n");
        scanf("%d %d",&a,&b);
        if (choice2 == '+'){
            c=a+b;
            printf("Addition = %d",c);
        }
        else if (choice2 == '-'){
            c=a-b;
            printf("Substraction = %d",c);
        }
        else if (choice2 == '*'){
            c=a*b;
            printf("Multiplication = %d",c);
        }
        else if (choice2 == '/'){
            c=a/b;
            printf("Division = %d",c);
        }
        else{
            printf("Invalid choice!");
        }
        printf("\nEnter y to continue and n to exit:\n ");
        scanf("%c",&choice1);
    }
}

当我运行上面的程序时,while循环重复而不从用户获取choice1的值。谁能告诉我上面的代码有什么问题???

2 个答案:

答案 0 :(得分:3)

choice1在表达式choice1 != 'n'中未进行初始化时进行比较。请改用do while循环或按如下所示进行更改

scanf(" %c",&choice1);
while(choice1 != 'n'){  
     // Loop body

      scanf(" %c",&choice1); // Do not forget to add a space before %c to skip newline 
                             //characters left behind by previous call to scanf.
}

答案 1 :(得分:1)

以及是的,choice1未初始化,您也忽略了扫描的返回值。

但要回答你的问题。你的问题是choice1在扫描后不是'n'得到'n',因为'\ n'在缓冲区中的'n'之前,

所以在最后扫描choice1之前使用getchar(),它会起作用。

我的意思是这样做:

getchar();

scanf("%c", &choice1);