getchar和putchar函数

288 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

getchar(输入字符、获取一个字符)

在这里插入图片描述 字符输入函数,没有参数,从输入缓冲区里面读取一个字符 - 一次只能读取一个字符
getchar 读取失败时返回EOF,EOF的值为-1,若用char修饰ch,空间不足以装下整型EOF,因此这里我们用int
对于 scanf 函数,'\n' 会触发 scanf 读取输入缓冲区的内容,但遇到 '\n' 或空格 ' ' 会停止读取,而 getchar 会直接读取 '\n' 和空格

putchar(输出一个字符)

在这里插入图片描述 与printf相似,但一次只能操作一个字符

基本用法

int main()
{
	int ch = getchar();//与scanf()相似,但一次只能操作一个字符
	//getchar 读取失败时返回EOF,EOF的值为-1,若用char修饰ch,空间不足以装下整型EOF,因此这里我们用int
	putchar(ch);//与printf相似,但一次只能操作一个字符
	return 0;
}

清理缓冲器

在这里插入图片描述 失败原因: 为了使程序运行我们敲了回车,scanf在输入缓冲区拿走了输入的密码,还剩了\n(回车键),而这个\n被getchar拿走了,并且\n!=“Y",执行else语句

解决方案(把\n也拿走):

int main()
{
	char input[20] = {0};
	printf("请输入密码:>");
	scanf("%s", input);//数组名本身就是地址,不用&
	//scanf读取字符串时,遇到空格就结束了
	//getchar();//拿走\n
	//如果有多个不需要的符号(例如空格)就要用getchar()拿走多个字符,于是写出以下循环
	//清理缓冲区
	int tmp = 0;
	while ((tmp = getchar()) != '\n')//判断的同时拿走不需要的字符
	{
		;//空语句
	}
	printf("请确认密码(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}

	return 0;
}

只打印0到9数字字符

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)//要加()否则顺序不对
	{
		if (ch < '0' || ch>'9')
			continue;//跳过putchar
		putchar(ch);
	}
	return 0;
}