C语言加法程序计算结果异常问题求助
C语言加法程序计算结果异常问题求助
嗨,我来帮你排查这个加法程序的问题啦!
先看你遇到的情况:输入1和3,结果输出1,这明显不对,问题主要出在你的scanf格式串上,咱们一步步拆解:
你的代码里写的是:
scanf("%2lf,%2lf", &q, &r);
这里有两个关键问题:
- 格式串里的逗号
,是必须严格匹配输入内容的,也就是说你输入的时候必须写成1,3(两个数用逗号直接隔开),如果是分开输入1再输3,或者用空格隔开,scanf会因为找不到逗号而停止读取第二个数,这时候r的值就还是未初始化的垃圾值(刚好这次是0,所以1+0=1)。 - 另外
%2lf里的2是宽度限制,意思是最多读取2个字符作为浮点数,这个对你输入单个数字影响不大,但如果输入超过两位的数(比如123),只会读取前两位,一般加法程序不需要这个限制,建议去掉。
给你几个修改方案:
方案1:允许用户用空格/回车分隔输入(更符合常规输入习惯)
把scanf的格式串改成这样:
scanf("%lf %lf", &q, &r);
这样用户不管是输入1 3还是先输1回车再输3,都能正确读取两个数。
方案2:保留逗号分隔,但要明确输入格式
如果一定要用逗号分隔,那得确保输入时严格按照数字,数字的格式(比如输入1,3),同时去掉没必要的宽度限制,改成:
scanf("%lf,%lf", &q, &r);
额外优化建议
- 给变量初始化,避免读取失败时出现奇怪的垃圾值:
double q=0, r=0, s=0; - 可以检查
scanf的返回值,判断是否成功读取了两个数,及时提示用户输入错误:if (scanf("%lf %lf", &q, &r) != 2) { printf("输入有误,请输入两个数字哦!\n"); return 1; }
修改后再试试,应该就能得到正确的结果啦!
备注:内容来源于stack exchange,提问作者Karthikey Yadav
相关产品推荐
相关产品推荐

