#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或者一个很大的负数,所以答案显示为负
本来c语言是非常自由的,例如我读入一个小数0.123
如果我仅仅想读入123
那么我只需要这么写
scanf("0.%d“,&n);
这样n=123
您的程序由于初始没有为x赋值,所以scanf("% d",&x)没有为x改变值,而x初始值应该是0或者一个很大的负数,所以答案显示为负
第2个回答 2013-04-23
不可能吧?
你搞错了估计
我运行的就是对的
你搞错了估计
我运行的就是对的