|
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又知道回车是输入完成换行呢?
|
|