鱼C论坛

 找回密码
 立即注册
查看: 931|回复: 6

[已解决]求大佬看看

[复制链接]
发表于 2021-8-5 23:50:38 | 显示全部楼层 |阅读模式

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

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

x

#include <stdio.h>

int main()
{
        float num = 0;
        double sum = 0;
        int status;

        do
        {
                printf("请输入合法的数字:");
                do
                {
                        sum = sum + num;
                        status = scanf("%f", &num); //请问这个是如何满足(用户可以在同一行输入多个数字,数字之间可以是任意一个分隔符)的条件呢?
                } while (getchar() != '\n' && status == 1);
        } while(status == 1);

        printf("结果是:%.2lf\n", sum);

        return 0;
}
最佳答案
2021-8-6 14:41:27
kongyunfei 发表于 2021-8-6 13:24
如果是scanf("%f", &num),但我输入:1a2,那么scanf不是应该读取到a发现不符合就直接停止读取吗,后面的 ...

1a2,我认为它先读一个1,a就被下面while里getchar读取了,然后判断条件,条件成立,接着读取2.
1a2b3,能有计算结果吗

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-6 11:20:34 | 显示全部楼层
这代码我在不同地方设置断点调试,次次结果不同
在这个代码中,判断条件为 输入不为回车并且scanf函数要执行,我发现只要scanf执行了,都会返回1,所以要想退出有两个条件,一是回车,二是让scanf不工作,我参考了这里关于scanf文章scanf用法
我猜测:连续输入两个字符,其中一个会被getchar接受,另一个sancf是不会管的,所以不执行,status为0,所以输入 1.2a1.2bc 时会退出循环,输出结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-6 13:24:09 | 显示全部楼层
大马强 发表于 2021-8-6 11:20
这代码我在不同地方设置断点调试,次次结果不同
在这个代码中,判断条件为 输入不为回车并且sca ...

如果是scanf("%f", &num),但我输入:1a2,那么scanf不是应该读取到a发现不符合就直接停止读取吗,后面的2是怎么读取的呢,我发的这个程序运行的话一行里面输入:1a2b3,它会自动把a和b忽略,最后还会输入1+2+3=6,这是为什么呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-6 14:01:15 | 显示全部楼层
因为getchar()就是读取一个非0字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-6 14:41:27 | 显示全部楼层    本楼为最佳答案   
kongyunfei 发表于 2021-8-6 13:24
如果是scanf("%f", &num),但我输入:1a2,那么scanf不是应该读取到a发现不符合就直接停止读取吗,后面的 ...

1a2,我认为它先读一个1,a就被下面while里getchar读取了,然后判断条件,条件成立,接着读取2.
1a2b3,能有计算结果吗

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-7 18:36:52 | 显示全部楼层
大马强 发表于 2021-8-6 14:41
1a2,我认为它先读一个1,a就被下面while里getchar读取了,然后判断条件,条件成立,接着读取2.
1a2b3, ...

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-7 18:37:27 | 显示全部楼层
tian1234 发表于 2021-8-6 14:01
因为getchar()就是读取一个非0字符

嗯嗯,懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 12:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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