您的位置:首页 > 其它

scanf()、gets()、getchar()函数的学习笔记

2015-11-05 10:34 267 查看
一、 scanf()

1. scanf()函数可以读入单个字符,如果想连续读入两个单个字符则易出错。

char c1,c2;

scanf("%c",&c1);

scanf("%c",&c2);

printf("%c",c1);

printf("%c",c2);

当从终端输入a、回车时,程序就已经执行完了。

原因:scanf()是从输入流缓冲区中取数据,在scanf()取数据前,输入流缓冲区中已经有a和回车两个字符了,因此第二个scanf()函数直接读取了回车值。

2. scanf()函数读入字符串时,遇到空格、回车、TAB时会认为输入结束,而且不会讲空格、回车、TAB键读入或进行转换,因此这些字符还继续停留在输入流缓冲区中。

因此输入有空格、回车时要谨慎使用scanf()函数。

二、gets()

scanf()函数无法读入空格,而gets()函数则可以。

gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在str指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。

使用strlen()求gets()函数读取的字符串长度时,最后的null值(即‘\0’)不计算在内。

三、getchar()

getchar()函数从输入流中获取一个字符,回车符不会被读入或转换而是继续停留在输入流缓冲区中。

-------------------------------------

因此,为了避免输入流缓冲区中垃圾数据对后续读入的影响,需要清空缓冲区。

方法一:使用函数fflush(stdin)

方法二:scanf("%[^\n]",string)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: