c语言的getchar()方法,getch()方法,scanf()函数

首先看一下我遇到的问题:

c语言的getchar()方法,getch()方法,scanf()函数_第1张图片

希望得到的效果: 

c语言的getchar()方法,getch()方法,scanf()函数_第2张图片

错误的效果: 

c语言的getchar()方法,getch()方法,scanf()函数_第3张图片 

 

为什么ch2值为空??没有让输入ch2?  换了scanf函数也是一样。

原因是因为getchar()这是在键盘缓冲区读取数据不是从键盘(终端)读取的。 当键盘输入a和回车(回车也是字符),会先被写入到键盘缓冲区,然后getchar()方法从缓冲区读取数据,每次只从缓冲区读取一个字符,剩下的会留下来等下一个getchar()读取。

解决方法:

1:新创建一个字符变量,用于接收getchar()。

2:或者清除缓冲区(fflush(stdin); rewind(stdin);

c语言的getchar()方法,getch()方法,scanf()函数_第4张图片

 

c语言的getchar()方法,getch()方法,scanf()函数_第5张图片 

c语言的getchar()方法,getch()方法,scanf()函数_第6张图片 

scanf函数也是同理!!!! 

#include "stdio.h"
 int main(){
     char ch1,ch2,ch3;
     scanf("%c",&ch1);
     ch3=scanf("%c",&ch3);
     printf("ch1=%c\n",ch1);
    scanf("%c",&ch2);
     printf("ch2=%c\n",ch2);
     return 0;
 }

 

补充一下getch()如下

1:getch函数在C语言中使用时需包含的头文件为 conio.h ,应写为#include
2:getch的功能:从标准输入设备(键盘)读入一个字符,不回显在显示器上.

#include "stdio.h"
#include "conio.h"
 int main(){
     char ch1,ch2,ch3;
     ch1=getch();
     printf("ch1=%c\n",ch1);
     return 0;
 }

c语言的getchar()方法,getch()方法,scanf()函数_第7张图片

 

 

你可能感兴趣的:(C语言,键盘缓冲区,getchar())