getchar()与putchar()函数详解
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
getchar()与putchar()
getchar
与putchar
其实最基本的作用就是用getchar
读取一个字符再用putchar
输出一个字符
基本用法
#include <stdio.h>
int main()
{
char c = 0;
c = getchar();
putchar(c);
return 0;
}
运行结果
输入一个a
然后再打印a
这里getchar
和putchar
与scanf
和printf
的作用基本一致只不过getcharputchar
只对字符类型操作而scanfprintf
对指定的类型进行操作
getchar()
getchar的定义
int getchar(void)
- 返回类型是
int
值所以返回的是字符的ASCII码 - 参数列表中是
void
所以不必在括号中传参数 - 如果
getchar
读取失败就会返回EOF
getchar()的一个重要机制
在getchar
函数的作用与键盘间存在一个输入缓冲区从键盘输入的内容会存在这个缓冲中接下来getchar
函数会从缓冲区中取走内容
因为
getchar
是对于字符进行操作所以每次执行getchar
都会取走输入缓冲区中一个字符
并且getchar
还会取走回车也就是\n
与空格
我们用下面的代码进行对输入缓冲区机制的测试
int main()
{
char ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
当输入一个字符
a
时同时我们会按下回车此时输入缓冲区中就有两个字符a\n
首先getchar()
会先取走字符a
然后通过putchar
打印出来
接着循环getchar()
取走字符\n
然后通过putchar
打印出来所以在输出中光标不在输出的a
的后面而在a
的下一行
接着输入缓冲区中以无内容getchar()
就会读到EOF
退出循环
还可以用以下代码更进一步验证getchar()
对于回车的读取
int main()
{
int i = 0;
char ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
i++;
}
printf("%d", i);
return 0;
}
输入字符
a
和b
这里实际上是输入a
后按一次回车输入b
后按一次回车所以输入缓冲区中的内容为a\nb\n
所以getchar()
会读取四次所以i
的值为会是4
getchar()与scanf()区别
*getchar
与scanf
的主要区别是getchar
能读取输入缓冲区中的一切字符类型包括空格与回车而scanf()不能读取空格与回车
putchar()
putchar的定义
int putchar ( int character );
- 传的参数是要输出的字符变量
putchar
的用法与printf("%c",character)
一致都是输出一个字符
实例
1.清空缓冲区
下面一段把代码是输入一段密码并且还要用getchar()接受是否确认密码的选项
int main()
{
char password[20] = { 0 };
int ch = 0;
printf("输入密码\n");
scanf("%s", password);
printf("请确认密码(Y/N):");
ch = getchar();
if (ch == 'Y')
{
printf("成功\n");
}
else
{
printf("失败\n");
}
return 0;
}
我们输入一端密码后还未输入Y或N代码就自动打印“失败”并退出运行
这其实还是
scamf
无法读取回车在作祟
当我们输入1234567后此时在输入缓冲区中其实存的是1234567\n
scanf("%s", password);
语句读取字符串因为它无法读取\n
所以此时scanf
只会读取走1234567
在输入缓冲区中还有\n
所以在之后的ch = getchar();
中就会读取\n
,不等于Y,所以会打印失败
所以要把缓冲中的 \n
消化掉也就是清空缓冲区
只要再写一个
getchar()
语句将\n
读取走就可以了
代码如下
int main()
{
char password[20] = { 0 };
int ch = 0;
printf("输入密码\n");
scanf("%s", password);
printf("请确认密码(Y/N):");
getchar(); //清空缓冲区
ch = getchar();
if (ch == 'Y')
{
printf("成功\n");
}
else
{
printf("失败\n");
}
return 0;
}
运行成功
2.字符串中有空格
以下代码是输入一个字符串再输出
int main()
{
char str[20] = { 0 };
scanf("%s", str);
printf("%s", str);
return 0;
}
如果输入的字符串是连续的也就是没有空格的此代码正常运行
如果输入的字符串是有字符的就会出现错误
错误的原因还是
scanf
无法读取缓冲区中的空格所以接下来要使用getchar
去读取字符串
因为输入的一段字符串一定会是以
\n
为结尾
所以在前面的
while ((ch = getchar()) != 'EOF)
改成while ((ch = getchar()) != '\n')
即可只要不遇到\n
就一直读取下去
代码如下
int main()
{
char str[20] = { 0 };
char ch = 0;
while ((ch = getchar()) != '\n')
{
putchar(ch);
}
return 0;
}
运行结果