请问一个数据类型带来的问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 21:22:58
我刚学C,写了一个按大小排列的程序:
#include<stdio.h>
main()
{int a,b,c,t;
printf("input 3 numbers:\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;
}
else if(a>c)
{t=a;a=c;c=t;
}
else if(b>c)
{t=b;b=c;c=t;
}
printf("the turn is%d,%d,%d\n",a,b,c);
}
定义整型,若输入三个小数,比如2和3.2和6,得到从小到大排序是0,3,2。我知道数据类型有问题,但请问这个0,3,2是怎么出来的啊
我知道输入小数不对,但我想知道的是0,3,2具体是怎么得出来的。谢谢
我的意思是,电脑是怎么把2,3.2,6处理成0,3,2的,即电脑的运算过程啊。希望各位高手谅解,我用的是gcc,再次谢谢

scanf("%d%d%d",&a,&b,&c);
输入 2 3.2 6 是错误的
会把 2给a 3给b 遇到.非法字符 会停止输入
因此 c 的值 不确定
不懂 LZ 的意思 什么 0 3 2 怎么得来的
上面 不是给你说了么。。。
会把 2给a 3.2的3给b 遇到(.)非法字符 会停止输入
因此 c 的值 不确定也就是说C 不会读入 值
放在C 中的是个垃圾 数据 不会有 0的
scanf("%d%d%d",&a,&b,&c);
%d 把输入解释成有符号10进制整数
读取时 跳过 空白字符(空格 制表符,换行符)直到遇到非空白字符如果发现了一个数字就保存在读取下一个字符如果还是数字在保存就这样scanf 持续读取 并保存直到 遇到一个非数字字符 这样scanf就认定已经 读到整数 的尾部
scanf("%d%d%d",&a,&b,&c);
如果输入
2 3.2 6
第一个%d读取时 跳过 空白字符(空格 制表符,换行符)遇到2 把2给了a在读取下个字符是空格 认定读取结束 第2个%d 跳过 空白字符 遇到3 把3给了b
在读取。非法字符 ANSI C 规定 函数在第一个出错的地方停止输入

首先你的程序就是错的
给三个数以上排序用if else 是很不明智的

定义整型,输入小数的话会停止输入

也就是说c是你原来内存的值

你输入的是3.2吗?
整型数不能接收小数。。。。

你输入3 看看。。
还有你比较大小的时候有错!!方法不正确。。。。书上有方法。。你可以去看下