如何阻止此代码挂在错误的输入?

Kaw*_*iKx 0 c

我正在从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)

但它挂在错误的输入上.可以做些什么来检查这种行为?

gee*_*aur 6

简短的版本是"不要使用" scanf().

问题是scanf()只提供有限的错误指示,并且在下一次调用时将错误数据保留为未读取; 特别是如果你不打算做错误检查,它就会永远旋转坏数据.

  1. 始终检查返回代码,以便了解它是否有效.
  2. 如果您正在进行面向行的输入,请使用fgets()或类似于读取整行,并sscanf()从该行进行解析.
  3. 如果输入不是你所期望的,那么做一些明智的事情,而不仅仅是通过.(您现有的代码只是假设它始终有效.)