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()会好一些,但要定义足够大的数组,可能会造成内存浪费