根据用户输入重复while循环 #包括 void main(){ 字符选项1,选项2; INTA、b、c; while(选项1!=“n”){ printf(“输入+表示添加:\n”); printf(“输入-用于减法:\n”); printf(“输入*进行乘法:\n”); printf(“输入/用于分区:\n”); scanf(“%c”和选项2); printf(“输入两个数字:\n”); scanf(“%d%d”、&a和&b); 如果(选项2=='+'){ c=a+b; printf(“添加=%d”,c); } else if(选项2=='-'){ c=a-b; printf(“减法=%d”,c); } else if(选项2=='*'){ c=a*b; printf(“乘法=%d”,c); } else if(选项2=='/')){ c=a/b; printf(“分区=%d”,c); } 否则{ printf(“无效选择!”); } printf(“\n输入y继续,输入n退出:\n”); scanf(“%c”和选项1); } }

根据用户输入重复while循环 #包括 void main(){ 字符选项1,选项2; INTA、b、c; while(选项1!=“n”){ printf(“输入+表示添加:\n”); printf(“输入-用于减法:\n”); printf(“输入*进行乘法:\n”); printf(“输入/用于分区:\n”); scanf(“%c”和选项2); printf(“输入两个数字:\n”); scanf(“%d%d”、&a和&b); 如果(选项2=='+'){ c=a+b; printf(“添加=%d”,c); } else if(选项2=='-'){ c=a-b; printf(“减法=%d”,c); } else if(选项2=='*'){ c=a*b; printf(“乘法=%d”,c); } else if(选项2=='/')){ c=a/b; printf(“分区=%d”,c); } 否则{ printf(“无效选择!”); } printf(“\n输入y继续,输入n退出:\n”); scanf(“%c”和选项1); } },c,C,当我运行上述程序时,while循环会重复,而不会从用户处获取choice1的值。有人能告诉我上面的代码有什么问题吗 在表达式choice1!='n'。使用do while循环或按如下方式更改 #include<stdio.h> void main(){ char choice1,choice2; int a,b,c; while(choice1 != 'n'){ printf("Enter + for addition:\n");

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

在表达式
choice1!='n'
。使用
do while
循环或按如下方式更改

#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);
    }
}

choice1
在表达式
choice1!='n'
。使用
do while
循环或按如下方式更改

#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);
    }
}

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

但要回答你的问题。您的问题是choice1在扫描后获取值'\n',而不是您可能认为的'n',因为'\n'在缓冲区中位于'n'之前

因此,在最后扫描choice1之前使用getchar(),它将起作用

我的意思是这样做:

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.
}

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

但要回答你的问题。您的问题是choice1在扫描后获取值'\n',而不是您可能认为的'n',因为'\n'在缓冲区中位于'n'之前

因此,在最后扫描choice1之前使用getchar(),它将起作用

我的意思是这样做:

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.
}

从一个更简单的循环开始,开始工作,不要写这么复杂的东西,然后想知道为什么它会中断。使用
do while
而不是
while
while(choice1!=“n”)
第一次,
choice1
未初始化,因此您有未定义的行为。并添加一个检查以防止被0除。
choice1
被设置为上次
scanf()
调用后未收集的换行符。从一个更简单的循环开始,不要写这么复杂的东西,然后想知道它为什么会坏。使用
do while
而不是
while
while(choice1!=“n”)
第一次,
choice1
未初始化,因此,您有未定义的行为。并添加一个检查以防止被0除。
choice1
被设置为上次
scanf()
调用后未收集的换行符。更常见的方法是
scanf(“%c”,&choice1)更常用的方法是
scanf(“%c”和&choice1)