#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的值。谁能告诉我上面的代码有什么问题???
答案 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);