对输入、输出及相关字符的正确理解

getchar putchar

 

 一:知识

#include<stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
		putchar(ch);
	return 0;
}
  • EOF

当  ch = getchar() 读取错位时ch = getchar()里面输入的显示为EOF。相当于整形中-1,并且占位四字节。

上述带面表示whlie中表示条件,输入的字符的结果不能报错的意思。

代码结果如下:

 这是一个循环语句,如果输入一个字符,就是一直显示一个字符,如果想要结束代码运行可以输入Ctry+z;系统会结束循坏。

二、代码联系

题:请输入一串密码;并且再输入Y/N来确定密码。

写法一:

#include<stdio.h>
int main()

{
	char input[20] = { 0 };
	printf("请输入密码:");
	scanf("%s", input);
	printf("请验证密码是否正确(Y / N):");
	int ch = getchar();
	if (ch == 'Y')
		printf("输入正确");
	else
		printf("请重新输入");


	return 0;
}

运行代码如下:

 问题:当输入密码后还没有输入Y/N时 系统就默认 int ch = getchar()输入的是N,为什么?

解释如下:

  • 程序自上而下运行时,当遇到scanf是,scanf会等待键盘输入字符,这里小编解释一下,当键盘输入一些字母或者数字时,他会存储在输入缓冲区内。

此题当输入密码后,点回车,输入缓冲区内会存在/n,后面的int ch = getchar()会自动识别输入缓冲区内的/n使代码继续向下运行。

 解决这种问题的办法如下面代码

 上代码加入的getchar就把输出缓冲区内的/n 拿走了,使代码就能正常逻辑运行了。

 下面将进一步完善这个代码:

 在scanf下面加入上述代码,改代码作用如下:

  • 可以防止输入的密码存在空格这种情况。
  • 吸收输入缓冲区内的所有字符,知道把\n吸收掉

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值