知识点14:关于输入

所有输入都是先存放于缓冲区中,当按下回车(换行符也进入缓冲区中)时,缓冲区中的数据被调用一次。调用scanf等函数时,是从缓冲区读取。直到缓冲区内的数据读完了才等待用户再输入。

1,关于scanf

1,输入单个字符时

%c前有空格时scanf(" %c", &a);scanf从缓冲区中第一个非空白字符开始读取,即无论输入多少空格、回车、制表都没有用。
%c前没有空格时scanf("%c", &b);则键盘输入的都能被scanf读取(包括换行、空格、制表)
最后输入的回车也存在于缓冲区中。

2,输入数字时

空格、回车、制表 会使一次输入结束
double型浮点数只能用%lf来输入(%lf也只能用来输入double型浮点数),输出时用%f、%lf均可。

3,输入字符串时

scanf读取字符串时不能读取换行符。

	char str1[20], str2[20], c;
	scanf("%s", str1);
	c = getchar();//输入str1时最后的换行符仍保留在缓冲区,可以作为单个字符被直接读入 
	//但若之后接着为用scanf输入另一个字符串,则输入str1时最后的换行符不能进入字符串str2,因此str2[0]不为换行符。
	//输入的换行符会积累在缓冲区中

因此在使用完scanf后,用getchar来消化或用while(getchar()!=’\n’) (万能),或者在scanf中加入一个\n 即scanf("%d\n", &n);也可以在scanf之后用fflush(stdin);以清空缓冲区。

2,关于gets

用gets输入字符串时,回车号被转化为 ‘\0’ 来表示字符串输入结束,因此回车符不会留在缓冲区中。
用gets输入时只有回车能使输入结束。

3,关于puts

puts函数将结束符’\0’转化为换行符’\n’,因此调用puts后会自动换行

4,关于getchar

用getchar输入字符时,回车都会作为字符!

猜你喜欢

转载自blog.csdn.net/Shao_yihao/article/details/113444361