一剑飘零 发表于 2021-9-5 23:02

C语言scanf的用法

本帖最后由 一剑飘零 于 2021-9-6 09:47 编辑

#include <stdio.h>

int main() {
      int a;
      int b;

      b=scanf("%d", &a);
      printf("b=%d", b);
      
      return 0;
我看有人这样写过,就想尝试一下,结果却不对,百思不得其解。
为什么a不等于b呢,输入时不是把a的值赋值给b了吗?为什么b一直是1呢?
下面这个就正常,看不出哪里错了。

int main() {
      int a;
      int b;
      
      scanf("%d", &a);
      b = a;
      printf("b=%d", b);

      return 0;
}

三滑稽甲苯 发表于 2021-9-5 23:15

scanf没有返回输入值,它只是把输入值传输给了变量a

真的小白 发表于 2021-9-5 23:16

返回已成功转换和分配的字段数量;返回值不包括已读取但未分配的字段。 返回值为 0 表示没有分配任何字段。

https://docs.microsoft.com/zh-cn/cpp/c-runtime-library/reference/scanf-scanf-l-wscanf-wscanf-l?view=msvc-160

Eaglecad 发表于 2021-9-6 00:11

这时候就很适合举一反三,把变量类型改了,再试试,你就知道为啥不能使用那个返回值了。

一剑飘零 发表于 2021-9-6 06:19

本帖最后由 一剑飘零 于 2021-9-6 06:24 编辑

三滑稽甲苯 发表于 2021-9-5 23:15
scanf没有返回输入值,它只是把输入值传输给了变量a
头有点晕,我看有的这样写是正常的。{:1_908:}

一剑飘零 发表于 2021-9-6 06:21

真的小白 发表于 2021-9-5 23:16
返回已成功转换和分配的字段数量;返回值不包括已读取但未分配的字段。 返回值为 0 表 ...

{:1_890:}不明白,既然是赋值怎么就不对呢

无闻无问 发表于 2021-9-6 06:58

第一个为什么不一样,b是1,a是输入值,scanf函数返回值没有多大意义,如果非要,表示函数执行成功,故返回1。
第二个b=a,把输入值又给了b,它们肯定一样嘛

一剑飘零 发表于 2021-9-6 07:32

本帖最后由 一剑飘零 于 2021-9-6 07:39 编辑

无闻无问 发表于 2021-9-6 06:58
第一个为什么不一样,b是1,a是输入值,scanf函数返回值没有多大意义,如果非要,表示函数执行成功,故返回 ...
有点明白了,意思就是说只是返回一个1表示成功,0表示不成功,没有值的传递。可是我看教程这样写却可以传递值,不知道错哪里了。

yuan71058 发表于 2021-9-6 07:50

tlf 发表于 2021-9-6 08:57

页: [1] 2 3
查看完整版本: C语言scanf的用法