我是C编程的新手,我在C中做了一个简单的计算器程序。
程序运行但不起作用,直到输入b
的值,然后输入字符时不询问输入。我不知道为什么会这样,但有没有解决办法?
这是我的代码:
#include <stdio.h>
int main()
{
float a,b;
char op;
printf("enter a: ");
scanf("%f",&a);
printf("enter b: ");
scanf("%f",&b);
printf("enter operation: ");
scanf("%c",&op);
switch(op)
{
case '+':
printf("\n%.2f %c %.2f = %.2f",a,op,b,a+b);
break;
case '-':
printf("\n%.2f %c %.2f = %.2f",a,op,b,a-b);
break;
case '*':
printf("\n%.2f %c %.2f = %.2f",a,op,b,a*b);
break;
case '/':
printf("\n%.2f %c %.2f = %.2f",a,op,b,a/b);
break;
default:
printf("invallid input!!");
}
return 0;
}
该程序似乎绝对正确,但仍有一些我遗漏的东西。答案很感激。
答案 0 :(得分:3)
只需在输入操作-v
函数的字符格式说明符之前添加空格,您的程序就能正常工作:< / p>
scanf()
答案 1 :(得分:2)
使用scanf()
时,它会在输入缓冲区中留下\n
个字符。下一个scanf()
将保留此换行符并存储它。您需要为scanf()
添加空格:
scanf(" %c", &op); /* to skip any number of white space characters */
或者使用getchar()
代替字符。函数getchar()
在出错时返回int
和EOF
它可以这样使用:
int op = getchar()
其中存储了op
中找到的字符。您也可以在getchar()
来电之后添加scanf()
,这将消耗剩余的\n
字符。
注意:最好检查scanf()
的结果。你应该写:
if (scanf(" %c", &op) != 1) {
/* oops, non character found. Handle error */