我一直在使用Windows,最近在Virtual Box上安装了Ubuntu。为了尝试Ubuntu,我写了一个简单的计算器程序。
这是怎么回事:
#include<stdio.h>
float add(float ,float ),sub(float , float ),mul(float ,float ),div(float ,float );
int main()
{
char ch;
float a,b;
printf("Enter an operator: ");
scanf("%c",&ch);
printf("Enter two values: ");
scanf("%f%f",&a,&b);
switch(ch)
{
case '+':
printf("The sum of %f and %f is %f\n",a,b,add(a,b));
break;
case '-':
printf("The substraction of %f from %f is %f\n",a,b,sub(a,b));
break;
case '*':
printf("The multiplication of %f and %f is %f\n",a,b,mul(a,b));
break;
case '/':
printf("The division of %f and %f is %f\n",a,b,div(a,b));
break;
default:
printf("\nEnter a valid operator: \n");
main();
}
return 1;
}
float add(float x,float y)
{
return (float)x + y;
}
float sub(float x,float y)
{
return (float)x-y;
}
float mul(float x,float y)
{
return (float) x*y;
}
float div(float x,float y)
{
return (float) x/y;
}
当我输入无效的运算符时,它实际上应该再次读取运算符和值。但是,它没有阅读操作员就直接询问价值。这是一张图片:
那么我做错了什么?请解释。提前谢谢!
答案 0 :(得分:3)
您没有忽略输入中的换行符。
更改
scanf("%c", &ch);
到
scanf(" %c", &ch);
再试一次。
当您输入3<enter>
时,第二个3
将使用%f
,但<enter>
(即换行符)仍将在输入缓冲区中,并且第一个%c
中的scanf()
将使用此换行符。 %c
中的空格将忽略输入缓冲区中的换行符。
$ ./a.out
Enter an operator: h
Enter two values: 2
3
Enter a valid operator:
Enter an operator: +
Enter two values: 2
3
The sum of 2.000000 and 3.000000 is 5.000000