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吸收掉
本文解析了getchar()和EOF在密码输入验证中的作用,揭示了为何未输入Y/N时默认为N的问题,并提供了解决方案。通过代码实例和修改,展示了如何确保正确接收用户输入并防止缓冲区干扰。
1637

被折叠的 条评论
为什么被折叠?



