我正在从Stephen Kochan的"C编程"中学习C语言.我正在进行第6章练习4,编写一个充当简单累加器计算器的代码.代码如下.只要以正确的方式提供输入,它就可以正常工作.
#include<stdio.h>
int main(void)
{
float num, accum = 0;
char operator;
while(1)
{
printf("Enter the number and the operator ");
scanf("%f %c",&num, &operator);
if (operator == 'E') break;
switch (operator){
case 'S':
accum = num;
printf("= %g\n",accum);
break;
case '+':
accum = accum + num;
printf("= %g\n",accum);
break;
case '-':
accum = accum - num;
printf("= %g\n",accum);
break;
case '*':
accum = accum * num;
printf("= %g\n",accum);
break;
case '/':
accum = accum / num;
printf("= %g\n",accum);
break;
}
}
printf("= %g\n",accum);
printf("End of Calculation\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但它挂在错误的输入上.可以做些什么来检查这种行为?
简短的版本是"不要使用" scanf().
问题是scanf()只提供有限的错误指示,并且在下一次调用时将错误数据保留为未读取; 特别是如果你不打算做错误检查,它就会永远旋转坏数据.
fgets()或类似于读取整行,并sscanf()从该行进行解析.