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里的内容输入结束后按回车,按回车之前的字符都会传到缓冲区
目前了解的有关知识就这么多了,如果有后续了解更多知识我还会来更新的。
文章如果有错误或者不好的地方请提出,我会积极听取建议并修改的。