鱼C论坛

 找回密码
 立即注册
查看: 3832|回复: 8

[已解决]为什么scanf可以同时将两个值(只要中间加个逗号或空格)赋值到一个变量命里

[复制链接]
发表于 2019-11-1 22:22:17 | 显示全部楼层 |阅读模式
10鱼币
#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;
}
最佳答案
2019-11-1 22:22:18
本帖最后由 superbe 于 2019-11-3 13:48 编辑

do {
    sum = sum + num;
    status = scanf("%f", &num);
} while (getchar() != '\n' && status == 1);

1. 先执行scanf读入一个数,
2. 再getchar()接收一个字符,不只是逗号和空格,换成其它字符也会被接收,这个字符相当于被“吃掉”了,
3. 然后再执行scanf时从上述的字符后面一个字符重新开始读取。如果不是数字(忽略开头的空白字符)就退出循环。
这样就可以逗号或空格为分隔符,读取多个数了。

最佳答案

查看完整内容

do { sum = sum + num; status = scanf("%f", &num); } while (getchar() != '\n' && status == 1); 1. 先执行scanf读入一个数, 2. 再getchar()接收一个字符,不只是逗号和空格,换成其它字符也会被接收,这个字符相当于被“吃掉”了, 3. 然后再执行scanf时从上述的字符后面一个字符重新开始读取。如果不是数字(忽略开头的空白字符)就退出循环。 这样就可以逗号或空格为分隔符,读取多个数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-1 22:22:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2019-11-3 13:48 编辑

do {
    sum = sum + num;
    status = scanf("%f", &num);
} while (getchar() != '\n' && status == 1);

1. 先执行scanf读入一个数,
2. 再getchar()接收一个字符,不只是逗号和空格,换成其它字符也会被接收,这个字符相当于被“吃掉”了,
3. 然后再执行scanf时从上述的字符后面一个字符重新开始读取。如果不是数字(忽略开头的空白字符)就退出循环。
这样就可以逗号或空格为分隔符,读取多个数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-1 23:16:29 | 显示全部楼层
同时将两个值赋值到一个变量命里,是我听错了还是你描述不清楚?

有本事,你先把一个变量的2个值打印出来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-2 18:34:20 | 显示全部楼层
ba21 发表于 2019-11-1 23:16
同时将两个值赋值到一个变量命里,是我听错了还是你描述不清楚?

有本事,你先把一个变量的2个值打印出 ...

我也很疑惑,但如果输入12,34之类的它会将这两个值都计算,但我只定义了一个变量num,为什么这两个数字中间加个逗号或空格就可以被赋值进去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-2 19:03:12 | 显示全部楼层
姬世鹏 发表于 2019-11-2 18:34
我也很疑惑,但如果输入12,34之类的它会将这两个值都计算,但我只定义了一个变量num,为什么这两个数字中 ...

比如,代码哪里?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-2 21:21:40 | 显示全部楼层
ba21 发表于 2019-11-2 19:03
比如,代码哪里?

  status = scanf("%f", &num);
你可以运行一下试试,输入23,12或23 12都可以进行独立运算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-2 21:47:38 | 显示全部楼层
姬世鹏 发表于 2019-11-2 21:21
status = scanf("%f", &num);
你可以运行一下试试,输入23,12或23 12都可以进行独立运算

听你讲半天,就讲这个。
输入23,12 结果num=23
输入23 12 结果num=23
有疑问吗?没有什么不对。

过多的解释不来,你还是仔细看看scanf的使用说明吧
https://baike.baidu.com/item/scanf/10773316?fr=aladdin
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-4 18:09:20 | 显示全部楼层
superbe 发表于 2019-11-1 22:22
do {
    sum = sum + num;
    status = scanf("%f", &num);

谢谢,终于理解我的意思了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-5 10:47:41 From FishC Mobile | 显示全部楼层
弟弟又不认真听课
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-4 19:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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