赞
踩
我们一般在进行输入输出的时候,就会用到 scanf / printf 。并且根据格式指定可以输入输出各种类型的数据。可以输入整形,字符,浮点型等其他类型的数据。
今天呢我先给大家再介绍一下 getchar 和 putchar.
getchar呢是读取一个字符,并且只能读取一个字符。putchar呢则是输出一个字符。
我们要学习getchar 和 putchar也很简单
int main()
{
int ch = getchar();
putchar(ch);
return 0;
}
我们先来看一个代码:
这串代码的意思就是读取一个字符,然后输出一个字符。如果没有读取失败,就一直进行循环读取。 按ctrl+z即可停下来。
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
上面这个代码看似很简单,其实逻辑是很复杂的。
我给大家介绍下它是怎样工作的:
- 当我们第一次运行的时候,它会等待让我们进行输入。
- 大家注意:像 getchar 和 scanf 是让我们输入数据的,但是这个输入数据是从键盘上拿吗?其实并不是。其实中间存在一个输入缓冲区。
上面介绍的有什么用呢,其实它的用处还蛮多的。一般可以用来清空缓冲区。
看个代码:
int main() { printf("请输入密码:>"); char password[20] = { 0 }; scanf("%s", password); printf("请确认密码(Y/N):>"); int ch = getchar(); if (ch == 'Y') { printf("确认成功\n"); } else { printf("确认失败\n"); } return 0; }
我们发现,它并没有等我们确认密码就确认失败了。那这个代码哪里出了问题呢?
我们来一步一步分析
所以我们想正确的进行这个代码,是不是要在 scanf 输入之后将输入缓冲区清理掉。
我们发现确实可以了。当我们到这里的时候,可能有的同学就觉得他学会了,实际上还差一点,我们再测试一下:
我们发现又确认失败了,原因很简单,这一次缓冲区里面放的不仅仅是 \n 了。
int main() { printf("请输入密码:>"); char password[20] = { 0 }; scanf("%s", password); //清理缓冲区 while (getchar() != '\n') { ; } printf("请确认密码(Y/N):>"); int ch = getchar(); if (ch == 'Y') { printf("确认成功\n"); } else { printf("确认失败\n"); } return 0; }
注:也可以用 gets 和 scanf(“%[ ^ \n]”,str) 读取带空格的字符串,但是我们还是要弄懂缓冲区的原理。
所以当以后大家做这种输入输出的时候很奇怪,怎么这个地方出问题了,怎么我还没有输入就停止了,这个时候我们就要学会去分析,是不是缓冲区出了问题。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。