我在下面写了代码:
#include<stdio.h>
int main() {
char o,r;
int x,y;
do {
printf("Enter operator: '+' or '-' or '*' or '/'\n");
scanf("%c",&o);
printf("Enter first number: ");
scanf("%d",&x);
printf("Enter second number: ");
scanf("%d",&y);
switch(o) {
case '+':
printf("Sum: %d",x+y);
break;
case '-':
printf("Subtract: %d",x-y);
break;
case '*':
printf("Multiply: %d",x*y);
break;
case '/':
printf("Division: %d",x/y);
break;
default:
printf("Wrong operator entered.");
}
printf("\nEnter y or Y to continue: ");
scanf("%c",&r); // r is not getting value?. why?
} while((r=='y')||(r=='Y'));
}
r没有获得价值,因此它没有做它应该做的事情。
printf("\nEnter y or Y to continue: ");
scanf("%c",&r);
似乎有什么问题?我错过了什么吗?
如果我使用cin,
,为什么此代码在c ++中正常工作但在c中使用scanf
时失败?
答案 0 :(得分:1)
你需要添加一行(或类似的东西):
while(getchar() != '\n');
输入第二个号码'\n'
后,换行符会保留在stdin
中,并且位于r
。
您可以通过在while
循环后添加以下行来证明这一点:
if(r == '\n')
printf("\nnewline\n");
输入运营商:&#39; +&#39;或者&#39; - &#39;或&#39; *&#39;或者&#39; /&#39;
*
输入第一个数字:5
输入第二个数字:6
乘:30
输入y或Y继续:
换行
答案 1 :(得分:0)
检查以下
#include<stdio.h>
int main()
{
char o,r;
int x,y;
do{
printf("Enter operator: '+' or '-' or '*' or '/'\n");
scanf(" %c",&o);
printf("Enter first number: ");
scanf("%d",&x);
printf("Enter second number: ");
scanf("%d",&y);
switch(o)
{
case '+':
printf("Sum: %d",x+y);
break;
case '-':
printf("Subtract: %d",x-y);
break;
case '*':
printf("Multiply: %d",x*y);
break;
case '/':
printf("Division: %d",x/y);
break;
default:
printf("Wrong operator entered.");
}
printf("\nEnter y or Y to continue: ");
scanf(" %c",&r);
} while((r=='y')||(r=='Y'));
}