getchar 和 putchar

getchar是获取字符。

使用规范:

成功时,返回读取的字符(提升为int值)。
返回类型是int以适应表示失败的特殊值EOF
如果标准输入位于文件末尾,则函数返回EOF 。 如果发生其他一些读取错误,该函数也会返回EOF

putchar 是将字符写入标准输出。 

使用规范:

 

成功时,返回写入的字符。
如果发生写入错误,则返回EOF


int main()
{
	int ch = getchar();//读取到一个字符的ASCII码值,返回int型。
	putchar(ch);//接受字符的ASCII码值,将他打印出来。
	return 0;
	
}

 输入A打印A,接受一个字符打印一个字符。


int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)//当ch 不等于 EOF(-1)时
	{
		putchar(ch);//打印ch
	}
	return 0;
}

 这是因为当我们输入一个字符时需要输入回车来确认,getchar会读取回车,当我们输入A 回车,他就会打印A 回车。

如果想停止程序需要按ctrl + z。


我们来写一个程序

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	printf("请确认密码(Y/N):");
	int ch = getchar();
	if (ch == 'Y')
		printf("确认成功:\n");
	else
		printf("确认失败:\n");
	return 0;
}

运行结果:

 

 你能找到为什么会直接打印确认失败的原因吗?


 

 我们只需要在加一个 getcha() 来把回车(\n)读取清理掉。

新的代码如下:

当然这个代码也是有bug的,当我们scanf输入的数据中有空格时,scanf读取到空格就会停止。

我们来看图:

 

 

 这时候我们可以写一个while循环

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	printf("请确认密码(Y/N):");
	int tmp = 0;
	while ((tmp = getchar()) != '\n')
	{
		;
	}/*当getchar读取的不是\n时,就一直循环直到读取到\n,
	 开始判断,等于\n,为假,把\n拿走并且停止循环。*/
	int ch = getchar();
	if (ch == 'Y')
		printf("确认成功:\n");
	else
		printf("确认失败:\n");
	return 0;
}

还有一种方法

我们把%s改成%[^\n],scanf里的内容输入结束后按回车,按回车之前的字符都会传到缓冲区

目前了解的有关知识就这么多了,如果有后续了解更多知识我还会来更新的。

文章如果有错误或者不好的地方请提出,我会积极听取建议并修改的。 

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值