C语言scanf的空格问题

#include<stdio.h>
void main()
{
int x;
printf("x=");
scanf("%d",&x);
if(x>0)
printf("x的符号为:+");
else
if(x<0)
printf("x的符号为:-");
else
printf("x的值为0");
}

问:为什么我在scanf里的%与d之间加了个空格,输入了一个5,它的结果就由原来的”+“变为”-"了?

scanf("% d",&x);加一个空格

这时x其实没有读到值,用的是x未初始的值

如果用VC debug编译的话,x默认被编译器赋值为0xCCCCCCCC,是一个大负数

故x为负值,所以输出为-了

如果用VC release编译的话,那就不一定了,x是的随机数,要看当前内存值为多少了。

 

当然这个跟编译器有关系的。

 

有一点可以确定的是 scanf("% d",&x);这一调用对x的值没有影响就是了

 

图片为用VC debug编译并运行

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-23
scanf("%d",*);的意思是读入一个整数,而在中间加空格就没有读入的含义了

本来c语言是非常自由的,例如我读入一个小数0.123
如果我仅仅想读入123
那么我只需要这么写
scanf("0.%d“,&n);
这样n=123

您的程序由于初始没有为x赋值,所以scanf("% d",&x)没有为x改变值,而x初始值应该是0或者一个很大的负数,所以答案显示为负
第2个回答  2013-04-23
不可能吧?
你搞错了估计
我运行的就是对的

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网