我的 C 程序中的字符输入错误?
Posted
技术标签:
【中文标题】我的 C 程序中的字符输入错误?【英文标题】:character input error in my C program? 【发布时间】:2017-07-02 19:28:19 【问题描述】:我是 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;
该程序似乎完全正确,但我仍然缺少一些东西。答案表示赞赏。
【问题讨论】:
【参考方案1】:当使用scanf()
时,它会在输入缓冲区中留下一个\n
字符。下一个scanf()
将保留此换行符并存储它。您需要在scanf()
中添加一个空格:
scanf(" %c", &op); /* to skip any number of white space characters */
或者使用getchar()
代替字符。函数getchar()
在错误时返回int
和EOF
可以这样使用:
int op = getchar()
其中存储在op
中找到的字符。您也可以在 scanf()
调用之后添加 getchar()
,这将消耗剩余的 \n
字符。
注意:检查scanf()
的结果是个好习惯。你应该改写:
if (scanf(" %c", &op) != 1)
/* oops, non character found. Handle error */
【讨论】:
【参考方案2】:只需在输入操作的scanf()
函数的字符格式说明符之前放置一个空格,您的程序就可以正常工作了:
scanf( " %c" , &op );
【讨论】:
以上是关于我的 C 程序中的字符输入错误?的主要内容,如果未能解决你的问题,请参考以下文章