C语言学习之路--浅谈函数getchar()与putchar()

一、前言

  • 在前面的学习中,如果我们想输入输出字符,我们会如下操作。
#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()的简单用法。
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值