我是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;
}
该程序似乎是绝对正确的,但仍然有一些我缺少的东西。非常感谢您的回答。
只需在输入操作的scanf()
函数的
字符格式说明符之前放置一个空格,你的程序就会正常工作:
scanf( " %c" , &op );
当使用
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 */