一、getcha()和putchar的()的使用
二、使用过程需注意的问题
三、解决方案原理
一、
getchar()和putchar是专门用于字符输入/输出的函数。getchar()作用是用户用输入设备输入一个字符(可以是转义字符,打印字符),回车键表示输入结束。putchar()是向显示器屏幕输出一个字符。
以下即两者的对比,(char A=getchar();等价char A;scanf("%c",A)),代码验证。
//用getchar()和putchar() //寻常方法
#define _CRT_SECURE_NO_WARNINGS 1 #define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031) #pragma warning(disable:6031)
#include<stdio.h> #include<stdio.h>
int main() int main()
{ {
char A; char A;
printf("输入一个字符:"); printf("输入一个字符:");
A = getchar(); scanf("%c", &A);
putchar(A); printf("%c", A);
return 0; return 0;
} }
二、注意事项
注意:空格,回车,Tab键均认为是字符
输入 ,回车后,输入流:字符+换行符/回车符。getchar()只能输入一个字符,则换行符会残留在缓冲区(输入流)中,影响下一次输入(将存于缓冲区的换行符/回车符读入,被后面的变量作为有效字符读入)。
看代码遇到的问题:(并不能按照一个一个输入的方式输入,第一次输入字符后,回车键被暂放在缓冲区,第二次其被当做有效字符被变量读入)
//输入字符方式为:输入a 回车 再输入b 回车 //第二种输入字符方式:连续输入ab 回车
#define _CRT_SECURE_NO_WARNINGS 1 #define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031) #pragma warning(disable:6031)
#include<stdio.h> #include<stdio.h>
int main() int main()
{ {
char A,B; char A,B;
printf("输入两个字符:"); printf("输入两个字符:");
A = getchar(); A = getchar();
B = getchar(); B = getchar();
printf("A=%c,B=%c", A, B); printf("A=%c,B=%c", A, B);
return 0; return 0;
} }
代码运行结果: 代码运行结果:
输入两个字符:a 输入两个字符:ab
A=a,B= A=a,B=b
三、解决方案原理
方案一:在每次调用scanf("")或getchar()函数后,再次用getchar()函数吸收残留到缓冲区的换行符或回车符,避免被后面的变量当作有效字符读入。
方案二:stdio.h中的fflush函数清空缓冲区(注意:非标准形式,ANSIC只规定函数fflush()来清空输出数据流,并未对清理输入缓冲区做任何规定,使用fflush()函数可能会出现程序的可移植性问题)
fflush(stdin);
//采用方案一的方法,用getchar()函数
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include<stdio.h>
int main()
{
char A,B;
printf("输入两个字符:");
A = getchar();
getchar();
B = getchar();
printf("A=%c,B=%c", A, B);
return 0;
}
代码运行结果:
输入两个字符:a
b
A=a,B=b