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
相关产品推荐
相关产品推荐

