这个月的昵称 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 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等