这个月的昵称 2021-10-23 22:48 采纳率: 66.7%
浏览 55
已结题

switch语句结束后不能进行scanf操作?

其他都挺正常,就是最后几句出了问题,它不执行scanf语句,无法实现选择,求解一下


#include <stdio.h>

int main(int argc, char** argv) 
{
    float  a,b;
    char op;
    END:printf("请输入算式:");
    scanf("%f%c%f",&a,&op,&b);  
    switch(op)
    {
        case '+':
            printf("%g+%g=%g\n",a,b,a+b);break;
        case '-':
            printf("%g-%g=%g\n",a,b,a-b);break; 
        case '*':
            printf("%g*%g=%g\n",a,b,a*b);break;
        case '/':
            if (0==b)
            printf("除数不能为零!\n");
            printf("%g/%g=%g\n",a,b,a/b);break;
        default:
            printf("运算符错误!\n"); 
    }
    char ch;
    printf("是否继续运算(Y/N or y/n):");
    scanf("%c",&ch); 
    if(ch=='Y'||ch=='y') 
    goto END;
    else
    printf("over!"); 
    return 0;
}

  • 写回答

2条回答 默认 最新

  • 关注

    因为前面 scanf("%f%c%f",&a,&op,&b);用户输入了数据和换行符‘\n’,在读取了数据之后,输入缓存里就残留了一个‘\n’。
    再次使用scanf("%c")会读取输入缓存里上次残留的‘\n’,而不是读取新输入的字符。这样就造成了严重的错误。

    可以在用 scanf("%c",&ch); 读取字符前用 setbuf(stdin, NULL); 清除输入缓存。

        setbuf(stdin, NULL);
        scanf("%c",&ch);
    

    或者用 scanf("%1s",&ch); 读取字符,用"%1s"会跳过空格与换行符,读取一个非空格与换行符的字符。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月31日
  • 已采纳回答 10月23日
  • 创建了问题 10月23日

悬赏问题

  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真