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吸收掉