鱼C论坛

 找回密码
 立即注册
查看: 1565|回复: 4

getchar()问题

[复制链接]
发表于 2020-6-19 19:44:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C语言初学者,编了一个做数学四则运算的计算器,输入顺序为:第一个数,回车,运算符,回车,第二个数,回车——得到运算结果。
为什么输入第一个数以后需要用getchar()吞回车,输入运算符后却不需要用getchar()吞回车?没想明白,求解答。
#include<stdio.h>
int main()
{
        float num1,num2,result;
        char oper_ch;
        printf("请输入第一个数\n————————\n");
        scanf("%f",&num1);
        getchar();//有getchar()吞回车
        printf("请输入运算符\n————————\n");
        scanf("%c",&oper_ch); //输入运算符,为什么这后面不需要加getchar吞回车?
        printf("请输入第二个数\n————————\n");
        scanf("%f",&num2);
        if (oper_ch=='+') result=num1+num2;
        if (oper_ch=='-') result=num1-num2;
        if (oper_ch=='*') result=num1*num2;
        if (oper_ch=='/') result=num1/num2;
        printf("%f\n",result);
    return 0;
}
IU$DH$5IB`C%JUGD04~JG[I.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-19 19:46:59 | 显示全部楼层
因为char本来就只能存放一个字符,回车就溢出了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 19:58:35 | 显示全部楼层
本帖最后由 dadidada 于 2020-6-19 20:05 编辑
qiuyouzhi 发表于 2020-6-19 19:46
因为char本来就只能存放一个字符,回车就溢出了。


我已经迷糊了,同样是scanf(),为什么输入第一个数字要加getchar(),后面输入运算符也用的scanf()却不用加getchar()?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-19 20:16:07 | 显示全部楼层
是不是因为我输入第一个数字后的回车('\n'),可以被输入运算符时的scanf("%c",&oper_ch)语句中的%c给识别掉,而输入运算符以后的回车不能被scanf("%d",&num2)语句中的%d识别掉,因为不是同一种数据类型。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-19 20:18:41 | 显示全部楼层
实际上是因为你不 getchar 的话,得到的运算符永远是换行符。
扫描整数时会自动忽略空白符,扫描字符型时不会。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 15:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表