getchar的使用和键盘输入缓冲区和scanf函数的注意点

#getchar()
1从缓冲区读取一个字符(包括空格/tab/回车),相当于清空缓冲区
2如果键盘缓冲区有残留会直接读取,例如scanf函数在输入后enter会残留换行符\n;在scanf函数后使用getchar可以清除\n.
3.getchar()是stdio.h中的库函数,作用是从stdin流中读入一个字符,当缓冲区为空时遇到getchar函数,程序会等待输入,直到用户enter结束,若缓冲区已有字符,getchar会直接读取字符。
4如何利用getchar()和putchar()循环输入输出

char c;
while((c = getchar()) != '\n')
putchar(c);

#键盘缓冲区与scanf函数
键盘缓冲区用来缓存“按键”的ASCII码,scanf函数每次在enter之后才会读取,而换行符\n会残留在键盘缓冲区。
#scanf注意事项
1,scanf函数在何时停止输入
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入,注意是结束一个数据的输入,不是结束该scanf函数,scanf函数仅在每一个数据域均有数据输入,并按回车后才结束。
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。
例子:
scanf("%d%d",a ,b)
输入数值方式:①,12 23
②,12
23
两种方式均能将12和23分别赋给a和b。
2,格式控制符%[ scanfset ]
scanfset 有两种形式:一种是以非 ^ 字符开头的 scanset , 表示在读入字符串时将匹配所有在 scanfset 中出现的字符,遇到非scanfset 中的字符时输入就结束;另外一种形式是以 ^ 字符开头的scanfset ,表示在读入字符串时将匹配所有不在scanfset 中出现的字符,遇到scanfset 中的字符输入就结束。
测试代码:

char str[ 20 ] = { 0 };
scanf("%[^\n]",str);
printf("%s\n", str);

输入I love you!
输出I love you!
特殊内容:
“-”字符的使用。当“-”出现在scanfset中且两边都有字符时,大多数编译器都做了如下所述实现:“-”表示匹配从其左边的字符到右边字符之间所有的字符(按ASCII码排序)。如a-z表示a到z的所有字符,又如0-9表示0到9这十个数字。所以,当scanfset为0-9时表示只匹配数字串,当scanfset为A-Za-z时表示只匹配字符(包括大小写),当scanfset为^0-9时不匹配所有数字。注意,“-”的字符只有在其左右两边都有有效字符时才有这个作用,否则被认为是普通字符,如“ 0-4-6-9”匹配的字符为{0,1,2 ,3,,4, -, 6,7,8,9},这样也为输入“-”字符提供了方法。
注意:当要匹配右侧 ] 或者 ^ 时,得这样去做。如果是右侧方括号时,得把它放在紧跟在左侧方括号的后边,也不可以有空格,如:%[]ajdfidfj ] ;如果是 ^ 时,不可以把它置于紧跟在左侧方括号的后边,如:%[ gfadhfu^fhgiu ] 。

猜你喜欢

转载自blog.csdn.net/weixin_54880923/article/details/113138429