You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言简易计算器程序运行异常求助

C语言简易计算器程序运行异常求助

嘿,我帮你排查下这个计算器程序的问题哈~看你描述的情况,不管是VS Code里scanf没反应,还是在线编译器里按y就终止,都是输入处理的小坑导致的,我给你拆解下:

  • 第一个坑:scanf格式串里的多余换行符
    你写的scanf("%d\n",&a);这里的\n完全没必要!scanf的格式串如果包含空白字符(比如\n、空格),它会一直等待输入流中的非空白字符才会结束本次输入。也就是说你输入数字按回车后,程序还在傻等下一个非空白输入,自然就看起来像“scanf没工作”。直接把格式串里的\n删掉,改成scanf("%d",&a);和scanf("%d",&b);就好。

  • 第二个坑:输入缓冲区的换行残留导致循环提前退出
    当你输入完运算符(比如+、-)按回车后,这个回车产生的换行符会留在输入缓冲区里。如果后面你用scanf("%c",&ch);来读是否继续的'y'/'n',它会直接把残留的换行符读成ch,这时候ch不等于'y',循环直接终止,就出现了“按y就退出”的假象。
    解决办法很简单:要么在读ch的scanf前面加一句getchar();吃掉残留的换行;要么把读ch的语句改成scanf(" %c",&ch);(注意%c前面加个空格,scanf会自动跳过所有空白字符,直接读有效的输入字符)。

给你贴个修改后的完整参考代码:

#include<stdio.h>
int main(){
    int a, b;
    char c, ch='y';
    while(ch=='y'){
        printf("enter the first number\n");
        scanf("%d",&a);
        printf("enter the second number\n");
        scanf("%d",&b);
        printf("enter the operator(+,-,*,/)\n");
        // 用空格跳过前面残留的空白字符
        scanf(" %c",&c);
        
        // 这里补充运算逻辑示例
        switch(c){
            case '+': printf("Result: %d\n",a+b); break;
            case '-': printf("Result: %d\n",a-b); break;
            case '*': printf("Result: %d\n",a*b); break;
            case '/': 
                if(b!=0) printf("Result: %d\n",a/b);
                else printf("Error: Division by zero\n");
                break;
            default: printf("Invalid operator\n");
        }
        
        printf("Do you want to continue? (y/n)\n");
        // 同样用空格跳过空白字符
        scanf(" %c",&ch);
    }
    return 0;
}

你试试改完之后的代码,应该就能正常循环运行啦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 13:38:12