求C语言中数组几种输入法的区别

如:chat a[5]; int i;
法一:for(i=0;i<5;i++) a[i]=getchar();
法二:gets(a);
法三:scanf("%s",a);
输入:abc dsdadsa
那种能满足定义的数组只取前5个字符-abc 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个回答  2009-04-29
getchar():
输入的东西,有一个算一个,每敲一下键盘就是一个字符.空格啊,回车啊,都不过滤.

scanf("%s",a); 输入字串,但是字串中不能有空个,遇到空格就中止了,后面的字串将被丢弃.

gets 跟scanf的功能相同,就是不用考虑空格的问题了
第2个回答  2009-04-29
1当执行到a[i]=getchar(): 时,程序会等待并要求你输入一个字符,并将这个字符赋值给变量a[i],也就是说getchar()函数输入的是一个字符!相对应的有putchar(a[i]); 表示将a[i]输出到屏幕。
2、gets(a)读入一个字符串,以回车结束。字符数组定义了多长,就从字符串中截取相应长度的字符给数组。
3、scanf("%s",a)是从键盘直接输入字符串,以回车符结束,但字符串中不能有空格。
比较而知,getchar()是输入一个字符,而后两者是输入一个字符串。

相关了解……

你可能感兴趣的内容

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