根据用户输入重复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循环会重复,而不会从用户处获取choice1的值。有人能告诉我上面的代码有什么问题吗 在表达式根据用户输入重复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");
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)代码>