鱼C论坛

 找回密码
 立即注册
查看: 2878|回复: 3

关于scanf函数中返回值和读取值的问题(遇到空格和回车)

[复制链接]
发表于 2019-12-21 19:04:58 | 显示全部楼层 |阅读模式
5鱼币
希望各位能详细的解释一下我下面两个大问题,非常谢谢!我有上网查阅一些对应的资料,有些问题还是不是很了解,希望有朋友能针对我每一个问题帮助我解释一下,不是水贴!!!  跪谢
返回值的问题:
scanf遇到空格和回车是会返回值还是不会返回任何值呢?   返回的话是1还是0呢?

这个是我自己写的一个程序我想探测一下返回值的问题:
#include<stdio.h>

int main()
{
        printf("a = ");
        int a,b;
        scanf("%d", &a);
        b = scanf("%d", &a);
        printf("a=%d b=%d\n",a,b);
        return 0;
}
下面是我有些不解的地发:
xiang@XIANG-LINUX:~/桌面$ ./1
a = a
a=-454443696 b=0                            这里a=-4544443696 这里为什么会出现这么一串数字呢?t而且每次a的输出的数字还不一样。 因为a是int,而我输入的是char类型就会这样吗?这种情况称为什么呢?

xiang@XIANG-LINUX:~/桌面$ ./1
a = 1
1
a=1 b=1                                   我这里输入完了 a=1  但是我回车后根没有执行最后的输出语句 a=1,b=1,而是输入完回车后到了下一行,再随便输入一个数字他才会跳到输出,这是为什么呢? 为什么会有这种情况呢?

xiang@XIANG-LINUX:~/桌面$ ./1
a = 1a1a
a=1 b=0                                      这里是关于scanf读取值的问题:  我a=1a1a, 可见scanf("%d", a);这里读取%d的时候是碰到字母就会结束后面也不看了,而且输出a=1,是不是说明scanf只把第一位的1给了a,后面就不看了呢?   这里为什么b=0呢?a不是等于1吗?有返回值啊?这里我有点糊涂了。(希望能详细解释一下)

xiang@XIANG-LINUX:~/桌面$ ./1
a = a1
a=-42282448 b=0                       这里和上面情况也是一样,我想验证下我上面的想法,我觉得scanf只看了第一个a然后直接就不看后面的1了,因为对不上%d,所以b=0,因为没有发生把“a”赋值给a 的操作。但是如果这么想得话,上面那个例子 输入是1a1a,第一个1已经给了a,为什么b还是为0呢?

xiang@XIANG-LINUX:~/桌面$ ./1
a =

   
  1
1
a=1 b=1                                    这里我a= 空格很多次   回车很多次   发现都没有直接跳到输出a和b,说明空格和回车对scanf不影响吧?不会像上面输入char类型而对应不上int类型a出现机器码这种情况把?    这是为什么呢?scanf自动忽略空格和回车,但是什么时候scanf又知道回车是输入完成换行呢?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-21 19:28:17 | 显示全部楼层
1、是你想得太多
2、不仔细看函数说明

关于返回值
scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。
读入失败返回0 ,读入成个1个返回1 ,成功2个返回2 .。。。。。。

关于 忽略空格和回车
你输:
123 567 789
scanf("%d%d%d", a, b, c) // 这就叫忽略空格和回车,3个全部读入成功。返回自然是3

你还是在仔细把说明看通透了
https://baike.baidu.com/item/scanf/10773316?fr=aladdin
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-25 20:22:49 | 显示全部楼层
scanf("%d", &a);
b = scanf("%d", &a);
楼主写两个scanf干啥
把第一个scanf去了,就没问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-26 11:43:28 | 显示全部楼层
//第一个问题:a = -4544443696 ,a在定义时没有初始化。
你定义了一个a,意味着a和内存的某一块空间产生关联,
但是没有赋值你就直接把a输出了,a这块空间里面的值是多少?问题出在这。
a这个空间,上一次有程序使用过这个空间,里面的值是一个随机值。
所以你需要在定义的同时对a赋值。
同时,定义必须放在调用的前面。
也就是:
int a,b = 0;                //定义
printf("a = ");        //调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 15:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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