C语言:清空键盘缓冲区(使用scanf(),getchar()函数必读)
(2011-07-08 14:33:29)
标签:
c语言键盘缓冲fflushscanfgetcharit |
分类: ■C语言 |
清空键盘缓冲区很多种方法,如用
fflush(stdin);
rewind(stdin);
setbuf(stdin,
NULL);前两者仅对windows有用,最后一个则对Linux系统也适用。那么为什么需要清空键盘缓冲区呢?
以下几个实例:
Sample one
01 |
#include
<stdio.h> |
02 |
|
03 |
int main(void) |
04 |
{ |
05 |
char
ch1; |
06 |
char
ch2; |
07 |
|
08 |
ch1
= getchar (); |
09 |
ch2
= getchar (); |
10 |
printf ( "%d , ch1, ch2); |
11 |
return
0; |
12 |
} |
【分析】:
【解决办法】:
修正后的写法:
Sample two
01 |
05 |
|
06 |
#include
<stdio.h> |
07 |
|
08 |
int main() |
09 |
{ |
10 |
char
ch1; |
11 |
char
ch2; |
12 |
|
13 |
scanf ( "%c" ,
&ch1); |
14 |
printf ( "ch1
= %d" , ch1); |
15 |
|
16 |
fflush (stdin); |
17 |
|
18 |
scanf ( "%c" ,
&ch2); |
19 |
printf ( "ch2
= %d" , ch2); |
20 |
return
0; |
21 |
} |
Sample three
01 |
07 |
|
08 |
#include
<stdio.h> |
09 |
|
10 |
int main() |
11 |
{ |
12 |
char
ch1; |
13 |
char
ch2; |
14 |
|
15 |
scanf ( "%c" ,
&ch1); |
16 |
printf ( "ch1
= %d" , ch1); |
17 |
|
18 |
setbuf (stdin,
NULL); |
19 |
|
20 |
scanf ( "%c" ,
&ch2); |
21 |
printf ( "ch2
= %d" , ch2); |
22 |
return
0; |
23 |
} |