为什么getchar无法接收输入?C语言加减运算程序问题
问题分析与解决方案
嘿,这个坑我踩过好多次!你遇到的问题根源在于输入缓冲区里残留的换行符。
为啥会跳过运算符输入?
当你用scanf("%d", &no1)输入第一个数字后,你按下的回车(也就是换行符\n)并没有被scanf读取,而是留在了输入缓冲区里。接下来执行sign = getchar()时,getchar()直接读取了这个残留的换行符,根本没等你输入+或-,所以程序就直接跳到了输入第二个数字的步骤。
两种简单的修复方法
方法1:用scanf读取运算符时加前置空格
把原来的sign = getchar()改成:
scanf(" %c", &sign);
这里的前置空格是关键——scanf遇到空格时会自动跳过所有空白字符(包括换行、空格、制表符),直到找到第一个非空白字符,也就是你要输入的运算符。这种方法能适配各种输入场景(比如输入数字后加空格再回车),是最稳妥的方案。
方法2:手动吃掉残留的换行符
在第一个scanf之后,加一行getchar()来读取缓冲区里的换行符:
printf("Enter first number:" ); scanf("%d", &no1); getchar(); // 吃掉输入no1后留下的换行符
不过这种方法如果用户输入数字后加了多个空格再回车,可能还会有残留空白,所以方法1更推荐。
修改后的完整代码
#include<stdio.h> int main() { // 建议main函数返回int类型,符合C语言标准 char sign; int no1, no2; int result = 0; printf("Enter first number:" ); scanf("%d", &no1); printf("no1 is %d\n", no1); printf("\nEnter sign: '+' or '-' "); scanf(" %c", &sign); // 这里加了前置空格处理空白字符 printf("Enter second number: "); scanf("%d", &no2); printf("no2 is %d\n", no2); if(sign == '+') { result = no1 + no2; } else if(sign == '-') { result = no1 - no2; } else { printf("Enter a valid sign!\n"); } printf("Result: %d\n", result); return 0; // 标准main函数需要返回值 }
顺便提一句,标准C规范里main函数应该返回int类型,并且最后加上return 0;,这样代码会更规范哦。
内容的提问来源于stack exchange,提问作者user175079
相关产品推荐
相关产品推荐

