姬世鹏 发表于 2019-11-1 22:22:17

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

#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;
}

superbe 发表于 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时从上述的字符后面一个字符重新开始读取。如果不是数字(忽略开头的空白字符)就退出循环。
这样就可以逗号或空格为分隔符,读取多个数了。

ba21 发表于 2019-11-1 23:16:29

同时将两个值赋值到一个变量命里,是我听错了还是你描述不清楚?

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

姬世鹏 发表于 2019-11-2 18:34:20

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

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

我也很疑惑,但如果输入12,34之类的它会将这两个值都计算,但我只定义了一个变量num,为什么这两个数字中间加个逗号或空格就可以被赋值进去

ba21 发表于 2019-11-2 19:03:12

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

比如,代码哪里?

姬世鹏 发表于 2019-11-2 21:21:40

ba21 发表于 2019-11-2 19:03
比如,代码哪里?

status = scanf("%f", &num);
你可以运行一下试试,输入23,12或23 12都可以进行独立运算

ba21 发表于 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

姬世鹏 发表于 2019-11-4 18:09:20

superbe 发表于 2019-11-1 22:22
do {
    sum = sum + num;
    status = scanf("%f", &num);


谢谢,终于理解我的意思了

姬世鹏的哥哥 发表于 2019-11-5 10:47:41

弟弟又不认真听课
页: [1]
查看完整版本: 为什么scanf可以同时将两个值(只要中间加个逗号或空格)赋值到一个变量命里