河岸柳 发表于 2021-8-13 16:24:02

s1e15求解

大佬,求解!
为什么输入非自然数,比如1.2,scanf的返回值不是1?如果输入1.2,scanf的返回值是几呢?

怎么理解下面这段话?
scanf的函数快查:
返回值:
如果函数调用成功,返回值是成功获取并填充到附加参数中的个数。

如果函数调用失败,返回值小于附加参数的个数(甚至是 0)。

如果读取到标准输入流的结尾处,则返回 EOF。

wp231957 发表于 2021-8-13 16:41:25

#include <stdio.h>
#include <conio.h>

int main()
{
      float t;
      float s;
      int ln=scanf("%f%f",&t,&s);
      printf("输入数据是%f ---%f函数返回长度是%d\n",t,s,ln);
      int lns=scanf("%f",&t);
      printf("输入数据是%f 函数返回长度是%d\n",t,lns);
      return 0;   
}
/*
      PS D:\我> ./wp4
                1.21.56789
                输入数据是1.200000 ---1.567890函数返回长度是2
                1.258
                输入数据是1.258000 函数返回长度是1
*/

人造人 发表于 2021-8-13 16:41:45

直接把问题和代码贴出来不好么?
你的这个问题一点也不方便解答,因为还需要去找你这个问题的题目和代码

河岸柳 发表于 2021-8-13 16:57:08

人造人 发表于 2021-8-13 16:41
直接把问题和代码贴出来不好么?
你的这个问题一点也不方便解答,因为还需要去找你这个问题的题目和代码

啊,这样
原题目是:请问下边程序输入什么值才能正常退出?
代码:#include <stdio.h>

int main()
{
      int ch;

      while (scanf("%d", &ch) == 1 && ch >= 0)
                ;

      return 0;
}
我大概知道(scanf("%d", &ch) == 1 && ch >= 0)的原理
只是不知道为什么输入1.2之类的数scanf的返回值不是1?那返回值是多少呢?

河岸柳 发表于 2021-8-13 16:58:48

wp231957 发表于 2021-8-13 16:41


抱歉,菜鸟新人,看不懂......{:10_266:}

人造人 发表于 2021-8-13 17:02:40

河岸柳 发表于 2021-8-13 16:57
啊,这样
原题目是:请问下边程序输入什么值才能正常退出?
代码:


#include <stdio.h>

int main()
{
    int ch;

    while (scanf("%d", &ch) == 1 && ch >= 0)
      printf("\tch: %d\n", ch);

    return 0;
}


输入输出
1.2
      ch: 1

请先自己分析一下为什么是这个输出

河岸柳 发表于 2021-8-13 17:55:04

人造人 发表于 2021-8-13 17:02
输入输出

请先自己分析一下为什么是这个输出

因为int?{:10_262:}

人造人 发表于 2021-8-13 18:13:06

河岸柳 发表于 2021-8-13 17:55
因为int?

我不知道你在说什么
输入 1.23
第一次 获取到 1
第二次 获取的时候失败了,因为 1 已经读取了,1 后面的 。(点)无法读取,因为是 %d 格式

wp231957 发表于 2021-8-13 18:39:58

人造人 发表于 2021-8-13 18:13
我不知道你在说什么
输入 1.23
第一次 获取到 1


所以了,我给他演示浮点数如何提取,它说看不懂,没办法,只能闪人

人造人 发表于 2021-8-13 18:47:31

wp231957 发表于 2021-8-13 18:39
所以了,我给他演示浮点数如何提取,它说看不懂,没办法,只能闪人

^_^

河岸柳 发表于 2021-8-13 22:20:24

人造人 发表于 2021-8-13 18:13
我不知道你在说什么
输入 1.23
第一次 获取到 1


{:10_266:}啊
我知道是因为int是整形数据,所以对于1.2只获取1......
我也试过把int改成float或double,把%d改成%lf去实验一下.......然后得出奇奇怪怪的结论,所以才来求助一下

额,我猜测一下,是因为int是整形数据,所以输入1.2,而1.2不是整数
所以按照scanf的返回值规定(如果函数调用失败,返回值小于附加参数的个数(甚至是 0))
scanf的返回值为0而不为1,不符合 scanf("%d", &ch) == 1 && ch >= 0 的要求
所以退出循环,是吗?

人造人 发表于 2021-8-13 22:24:40

河岸柳 发表于 2021-8-13 22:20

我知道是因为int是整形数据,所以对于1.2只获取1......
我也试过把int改成float或double ...

河岸柳 发表于 2021-8-13 22:25:12

wp231957 发表于 2021-8-13 18:39
所以了,我给他演示浮点数如何提取,它说看不懂,没办法,只能闪人

大佬,对萌新手下留情啊.....{:10_266:}
刚学没几天,真的看不懂啊......{:10_285:}
没有听过浮点数的提取......{:10_250:}

河岸柳 发表于 2021-8-13 22:36:20

人造人 发表于 2021-8-13 22:24


感谢
最佳答案要设哪一条啊?{:10_291:}

人造人 发表于 2021-8-13 22:44:10

河岸柳 发表于 2021-8-13 22:36
感谢
最佳答案要设哪一条啊?

你随意,^_^

lgh202020 发表于 2021-8-18 16:01:32

河岸柳 发表于 2021-8-13 22:36
感谢
最佳答案要设哪一条啊?

随便你咯
页: [1]
查看完整版本: s1e15求解