一、前言
- 在前面的学习中,如果我们想输入输出字符,我们会如下操作。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char ch = 0;
scanf("%c", &ch);//输入
printf("%c\n", ch);//输出
return 0;
}
运行结果(举例)
那么还有没有其他的呢?这时我们引入getchar()与putchar()
二、举例
1、简单介绍
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char ch = 0;
//scanf("%c", &ch);//输入
ch = getchar();//输入一个字符
//printf("%c\n", ch);//输出
putchar(ch);//输出一个字符到屏幕上
return 0;
}
注意:scanf与printf可用于任何数据类型,getchar()与putchar()只能用于字符。getchar()返回的是字符的ASC II码值(int)。
2、引入while
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
char ch = 0;
while ((ch = getchar()) != EOF)//EOF相当于-1
{
putchar(ch);
}
return 0;
}
运行结果
- 运行过程详解
在getchar()从键盘输入字符时,会存在一个输入缓冲区。加入我们从键盘输入A,在输入缓冲区便会存在A\n(\n为按的回车),getchar()(拿一个字符)就会把A拿走并放入变量ch,然后由于循环会在拿走\n并放入ch,打印会有换行效果。(scanf()同样适用)
3、应用场景(缓冲区)
- 假如我们做如下的一个小程序。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
//数组名本来就是地址
char password[20] = { 0 };
int ch = 0;
printf("请输入密码:>");
scanf("%s", password);//123456
printf("请确认密码(Y/N):>");
ch = getchar();
if (ch == 'Y')
printf("确认成功\n");
else
printf("确认失败\n");
return 0;
}
运行结果
- 咦?是不是和预想的不一样呢?来让我们分析下。
通过分析我们会发现当我们输入123456时,在缓冲区会有123456\n。scanf(遇见空格也不会继续读取)之拿走了123456,剩余\n就会被getchar直接拿走并出现如图结果。 - 因此,该怎么解决呢?
不妨设置一个缓冲区,如下
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
//数组名本来就是地址
char password[20] = { 0 };
int ch = 0;
printf("请输入密码:>");
scanf("%s", password);//123456
//消除\n - 清理缓冲区,也同样适用于清理空格后的所有字符
while (getchar()!='\n')//只读,把字服符从缓冲区拿走
{
;
}
printf("请确认密码(Y/N):>");
ch = getchar();
if (ch == 'Y')
printf("确认成功\n");
else
printf("确认失败\n");
return 0;
}
4、其他
- 假设出现以下代码,是什么意思呢?
#include <stdio.h>
int main()
{
char ch = '\0';
while ((ch = getchar()) != EOF)
{
if (ch < '0'|| ch > '9')
continue;
putchar(ch);
}
return 0;
}
作用:这个代码的作用是:只打印数字字符,跳过其他字符的。
三、浅谈scanf与printf
- scanf - 按照指定的格式,输入数据
- printf - 按照指定的格式,输出数据
- 举例如下
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
printf("%d", num);
//float f = 0.0f;
//scanf("%f", &f);
//printf("%f\n", f);
return 0;
}
四、总结
- 总结了getchar()与putchar()的简单用法。