Description
有四个小朋友都很喜欢玩滑滑梯,为了避免推挤,老师给他们按照个头从高到低排队依次滑滑梯。编写一个程序帮助老师完成这个排队过程。
Input
输入数据有多行,一行总共四个数,代表四个小朋友的身高,单位为cm,以空格分隔
Output
输出数据有多行,每行输出一组数据的排序结果,每行按照从高到低的顺序输出四个小朋友的身高
Sample Input
85.2 112.6 98.4 89.6
102 96 85.9 95
97.6 84 107 92.5
Sample Output
112.6 98.4 89.6 85.2
102.0 96.0 95.0 85.9
107.0 97.6 92.5 84.0
Hint
输入语句可以采用形式:while(cin>>a>>b>>c>>d),每输入一组数据,对它们排序,然后输出排序结果
恩,楼主这个问题我也思考过,以下是我的总结,希望能对你有点提示
1.for循环输入
缺点:
1.)不能通过getchar()从键盘上获得字符'\0',所以如果你想输入的是字符串,处理起来比较麻烦;比如,你想输入“china”字符串的话,你不得不这么写
for(i=0;i<5;i++)
a[i]=getchar();
a[5]='\0';
优点:
引入变量i,很方便控制你想输入的长度,并且不会造成溢出问题,比如,你想输入33个字符,你只要i<33,然后输入就好,不用像gets,scanf那样去数。
--------------------------------------------
2.gets()
缺点:
个人觉得没什么缺点,目的用来输入字符串,允许输入空格,回车符做为字符串输入结束的标志。但是,你必须定义一个足够大的数组,防止输入的字符数超过数组长度而造成溢出错误。
优点:
如果你想输入带有空格或制表符的字符串,用它最合适啦~
-----------------------------------------------
3.scanf()
缺点:
输入的字符串不能带有空格,制表符,回车,scanf默认这些是结束输入的标志。表达形式上没有gets()简洁.同样,也必须将数组定义的足够大,会造成不必要的内存浪费。
scanf()的参数为地址,容易忘记写&,出错几率大
优点:
同gets()一样,可以实现字符串的整体输入,并自动补'\0',不用像第一种方法那样麻烦
--------------------------------------------------
如果你输入:abc dsdadsa,且只取前5个的话,只有第一种可以,各有利弊
实现如下:
1.char a[6];
int i;
for(i=0;i<5;i++)
a[i]=getchar();
a[5]='\0';
printf("%s",a);
2.gets();必须定义长度为5的字符数组,输入超过5个,容易溢出,不推荐
3.scanf();默认空格结束,实现起来相当麻烦,不推荐
------------------------------------------------
总结下,
如果你想输入的字符串长度已经确定,用for会节省内存,但不要忘了最后加'\0'
如果你想输入的字符串长度不确定,用gets(),scanf()会好一些,但要定义足够大的数组,可能会造成内存浪费
--------------------------------------
楼下的可以继续补充,哈哈,好长~~~
1.for循环输入
缺点:
1.)不能通过getchar()从键盘上获得字符'\0',所以如果你想输入的是字符串,处理起来比较麻烦;比如,你想输入“china”字符串的话,你不得不这么写
for(i=0;i<5;i++)
a[i]=getchar();
a[5]='\0';
优点:
引入变量i,很方便控制你想输入的长度,并且不会造成溢出问题,比如,你想输入33个字符,你只要i<33,然后输入就好,不用像gets,scanf那样去数。
--------------------------------------------
2.gets()
缺点:
个人觉得没什么缺点,目的用来输入字符串,允许输入空格,回车符做为字符串输入结束的标志。但是,你必须定义一个足够大的数组,防止输入的字符数超过数组长度而造成溢出错误。
优点:
如果你想输入带有空格或制表符的字符串,用它最合适啦~
-----------------------------------------------
3.scanf()
缺点:
输入的字符串不能带有空格,制表符,回车,scanf默认这些是结束输入的标志。表达形式上没有gets()简洁.同样,也必须将数组定义的足够大,会造成不必要的内存浪费。
scanf()的参数为地址,容易忘记写&,出错几率大
优点:
同gets()一样,可以实现字符串的整体输入,并自动补'\0',不用像第一种方法那样麻烦
--------------------------------------------------
如果你输入:abc dsdadsa,且只取前5个的话,只有第一种可以,各有利弊
实现如下:
1.char a[6];
int i;
for(i=0;i<5;i++)
a[i]=getchar();
a[5]='\0';
printf("%s",a);
2.gets();必须定义长度为5的字符数组,输入超过5个,容易溢出,不推荐
3.scanf();默认空格结束,实现起来相当麻烦,不推荐
------------------------------------------------
总结下,
如果你想输入的字符串长度已经确定,用for会节省内存,但不要忘了最后加'\0'
如果你想输入的字符串长度不确定,用gets(),scanf()会好一些,但要定义足够大的数组,可能会造成内存浪费
--------------------------------------
楼下的可以继续补充,哈哈,好长~~~
温馨提示:答案为网友推荐,仅供参考