输入函数的区别
scanf()、getchar()、gets()的区别
读取字符串时:
scanf()以Space、Enter、Tab结束一次输入,不会舍弃最后的回车符(即回车符会残留在缓冲区中);空格也会残留在缓冲区中;自动将 字符串结束符**’\0**'送入数组中
getchar()以Enter结束输入,也不会舍弃最后的回车符;
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!
scanf读取字符串问题
以空格结束一次输入
分析原因:scanf()遇到空格结束一次读取
分析原因:
到此程序执行完毕,不会执行第二次的读取操作!这个问题的原因跟问题一类似,第一次输入Hello world!后,字符串Hello world!都会被读到输入缓冲区中,而scanf()函数取数据是遇到回车、空格、TAB就会停止,也就是第一个scanf()会取出"Hello", 而"world!"还在缓冲区中,这样第二个scanf会直接取出这些数据,而不会等待从终端输入。
以回车结束一次输入
分析原因:以回车结束一次输入
回车符残留在缓冲区中
分析原因:回车符会留在缓冲区,所以第二个scanf()直接读取缓冲区中的回车符,而不等待新的输入
空格也会残留在缓冲区中
scanf读取字符
回车残留在缓冲区中
分析原因:
程序的输入都建有一个缓冲区,scanf(),cin()函数都不是直接从键盘读取数据而是从缓冲区读取,第一次从键盘输入
a空格b回车,由于格式scanf("%c %c",&str1,&str2); 两个%c之间有空格所以键盘输入的空格不作为字符被读取;scanf函数读取a b后回车残留在缓冲区中,当再次从键盘输入字符a b时,scanf()函数读从缓冲区读取回车 和a的值
空格会作为字符被scanf()函数读取
getchar()与putchar()
getchar()与putchar()用法:
只能输入或输出一个字符
char ch;
ch=getchar();
putchar(ch);
getchar()读取字符时回车也会留在缓冲区
空格 回车都会作为字符被getchar()读入
分析原因:
a空格b空格c回车d回车一共8个字符
gets()与puts()
gets()用法:
gets()以Enter结束输入(空格不结束),接受空格,会舍弃最后的回车符!
回车键在不同的函数下读取的值不同
回车,ASCII码13
换行,ASCII码10
空格,ASCII码32