字符输入/输出(getchar()、putchar())

一、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                               #include      
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                            #include
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
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

你可能感兴趣的:(杂项,c语言)