广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中getchar的用法以及实例解析
  • 295
分享到

C语言中getchar的用法以及实例解析

2024-04-02 19:04:59 295人浏览 薄情痞子
摘要

目录getchar解析一、getchar的返回类型及作用机制二、根据一段代码初步了解三、实例(“输入密码”)进一步了解1、代码达不到理想效果2、输入的密码中有

getchar解析

一、getchar的返回类型及作用机制

getchar——读取字符的函数

int getchar(void)

返回类型为int,参数为void.

有人可能会有疑惑,getchar既然是读取字符的,为什么返回类型是int呢?

1、getchar其实返回的是字符的ASCII码值(整数)。

2、getchar在读取结束或者失败的时候,会返回EOF。

EOF意思是end of file,本质上是-1.

二、根据一段代码初步了解

下面我们一起来看看下面这段代码什么意思

#include<stdio.h>
int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
	}

	return 0;
}

意思是

getchar先读取一个字符放到ch里面去,如果这个字符不等于EOF,就进入循环,打印这个字符。当getchar读到文件末尾或者结束时,它会返回一个EOF,此时结束循环。
我们来运行试一下

输入A,输出A;输入b,输出b…

当我们想要结束时,输入ctrl+Z,再按回车即可。

注意,如果上面的代码不用while循环的话,输入123,putchar()只会输出1。因为一个getchar一次只能读取一个字符。

三、实例(“输入密码”)进一步了解

1、代码达不到理想效果

我们再来看看下面这段代码

#include<stdio.h>
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;
}

按理说,我们是想要输入密码,然后再输入N或者Y,根据我们输入的是N还是Y打印“确认成功”或“确认失败”。

我们来运行一下,看看是否是这样

可以看到,我们还没有输入Y或N,他就立马跳出来了一个“确认失败”

为什么会是这样呢?

请添加图片描述

(1)原理详解

我们来看看它其中的原理:

scanf和getchar都是输入函数,它们都是从键盘上来读取我们的数据,但它们不是直接从键盘上来读取我们的数据。它们和键盘之间有一个区域叫缓冲区

输入函数先来看缓冲区中是否有数据,如果有,它直接就拿走了,不需要从键盘输入,如果缓冲区什么都没有,则需要从键盘输入,再拿走。

明白这个道理后,我们回到上面那串代码。

最开始缓冲区里没有东西,所以我们这行代码

scanf("%s", password);

就是从键盘输入密码,我们输入123456。为了让123456放进去,我们还敲了一个回车,所以缓冲区里为

123456\n

接下来就是scanf来读缓冲区里的字符串了,scanf读取的方式是读取\n之前的内容,所以读取的是123456.
printf("请确认密码(Y/N):>");后,就是下面这行代码:

int ch = getchar();

getchar用来接收字符,

getchar看到缓冲区中有数据(\n),直接取走,不需要从键盘输入。自然也就出现了我们上面运行结果的那一幕:还没输入N或Y,就立马跳出“确认失败”了。

(2)解决措施

那么我们怎么解决这个问题呢?

很自然就能想到需要先把缓冲区里清空

那我们就在前面加一个getchar把缓冲区中的“\n”给清理掉。

即代码变为

#include<stdio.h>
int main()
{
	char password[20] = {0};
	printf("请输入密码:>");
	scanf("%s", password);
	
	getchar();//把缓冲区中的\n清理掉
	
	printf("请确认密码(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
	return 0;
}

运行一下即可发现,现在能够得到我们的理想结果。

2、输入的密码中有空格

不过又有一个问题,当我们输入密码为123456 789时(中间有一个空格),还没等我们输入N或Y,又立马跳出了“确认失败”。
这又是怎么回事呢?我们一起来看看

(1)原理详解

首先缓冲区里没有东西,我们需要通过键盘输入密码123456 789,

然后scanf就来取缓冲区中的数据,当它读到空格的时候,它就不再读了(这是scanf的一个作用性质)。

所以scanf就只取走了123456,而缓冲区中还剩下(空格) 789\n。

再往下,运行到getchar();这行代码,然而这里只有一个getchar,它只能读取一个字符,也就是只读了空格,缓冲区中还剩789\n。

再往下,就是我们的这行代码int ch = getchar();

getchar()一来就取走了缓冲区中的7,根本不需要我们从键盘输入N或Y。运行时自然它就自动跳出了“确认错误”。

(2)解决措施

所以我们需要把缓冲区中的东西先全部清走

那我们就用一个循环,只要没读到\n,我们就一直用getchar读

//把缓冲区中的内容全读走
	while ( getchar() != '\n')
	{
		;
	}

整段代码如下:

#include<stdio.h>
int main()
{
	char password[20] = {0};

	printf("请输入密码:>");
	scanf("%s", password);

	//把缓冲区中的内容全读走
	while ( getchar() != '\n')
	{
		;
	}
	printf("请确认密码(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}

	return 0;
}

运行一下

是我们想要的效果。

以上就是关于getchar的用法的实例解析。

总结

到此这篇关于C语言中getchar的用法以及实例的文章就介绍到这了,更多相关C语言中getchar用法实例内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言中getchar的用法以及实例解析

本文链接: https://www.lsjlt.com/news/141181.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言中getchar的用法以及实例解析
    目录getchar解析一、getchar的返回类型及作用机制二、根据一段代码初步了解三、实例(“输入密码”)进一步了解1、代码达不到理想效果2、输入的密码中有...
    99+
    2022-11-13
  • C语言goto的应用举例以及详解
    目录一、goto语句的简单解释二、goto语句简单引用举例三、goto语句的实际引用场景总结一、goto语句的简单解释   goto语句其实就是一个跳转语句。C语言中提供了...
    99+
    2022-11-13
    c语言goto用法举例 c语言goto语句怎么用 C语言中的goto
  • 在C语言中getchar的使用方法和读取规则讲解
    目录前言一、getchar是什么?二、getchar的使用方法1.只获取一次(字符/字符串)的代码样例2.循环获取(字符/字符串)的代码样例三、getchar的读取规则总结前言 今天...
    99+
    2022-12-08
    C语言getchar的使用 C语言getchar读取规则 getchar的使用
  • C语言中typedef的用法以及#define区别详解
    目录1、简洁定义 2、为已有类型起别名 为字符数组起别名为指针起别名3、typedef 和 #define 的区别总结1、简洁定义 C语言允许为一个数据类型起一个新的别名,就像给人...
    99+
    2022-11-12
  • C语言中结构体实例解析
    目录一.结构体定义二.实例演示结构体作为函数参数结构体指针三.typedef struct 和 struct的区别1、声明不同2、访问成员变量不同3、重新定义不同总结一.结构体定义 ...
    99+
    2022-11-13
  • C语言中getchar()的原理以及易错点解析
    目录一.getchar()系列1.getchar()工作原理及作用2.使用getchar()清理回车\n3.使用getchar()清理缓存4....
    99+
    2022-11-13
  • C语言算法的定义及分析详解
    目录算法的定义算法和程序的区别算法程序算法的性质算法的表示算法的分析分析原则常用的复杂性函数算法分析基本法则非递归算法:总结算法的定义 算法是一系列良定义的计算步骤 算法和程序的区别...
    99+
    2022-11-12
  • C语言中static的使用方法实例详解
    目录前言一、static修饰变量1.修饰局部变量2.修饰全局变量二、static修饰函数补充:static的好处是什么?总结前言 static关键字不仅可以用来修饰变量,还可以用来修...
    99+
    2022-11-13
    c语言static的用法 static作用 c语言 c语言static关键字的用法
  • C语言实例讲解嵌套语句的用法
    目录一 、if 嵌套二、比较ab两个数值大小三、总结一 、if 嵌套 格式: if ( 条件 ){    if( 嵌入一个条件 ){   &n...
    99+
    2022-11-13
  • c语言中回调函数的使用以及实际作用详析
    目录前言一、通过这节课程你能掌握以下知识:二、程序架构的核心理念和需求三、回调函数的作用1.输出型2.输入型四、掌握回调函数的程序编写总结前言 今天给大家讲一下芯片/模块厂家写SDK...
    99+
    2022-11-12
  • C语言中extern详细用法解析
    在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。  1. extern修饰变量的声明。  举例来...
    99+
    2022-11-12
  • c语言枚举类型enum的用法及应用实例
    目录前言一、枚举的概念二、枚举的几种用法1.直接定义枚举值,然后给普通变量赋值。2.定义带名称的枚举三、定义枚举别名四、枚举有什么用,用在哪里?最后总结:前言 今天跟大家讲一下我在产...
    99+
    2022-11-12
  • R语言函数详解及实例用法
    函数是一组组合在一起以执行特定任务的语句。 R 语言具有大量内置函数,用户可以创建自己的函数。 在R语言中,函数是一个对象,因此R语言解释器能够将控制传递给函数,以及函数完成动作所需...
    99+
    2022-11-12
  • C语言指针与引用的区别以及引用的三种用法案例详解
    1.指针与引用的区别: 指针是一块内存的地址值,而引用是一块内存的别名。 下面引自://www.jb51.net/article/221791.htm 从概念上讲。指针从本质上讲就是...
    99+
    2022-11-12
  • C语言中switch语句基本用法实例
    目录switch语句:switch语句的基本格式C语言switch语句用法补充:用switch来给成绩等级 总结switch语句: 实际生活中,需要做出很多选择,大家都知道...
    99+
    2022-11-13
  • C语言示例讲解ifelse语句的用法
    目录1、前言2、if语句的语法结构3、关于if else语句的示例4、if else 书写形式的对比5、例子1、前言 (1)C语言是结构化的程序设计语言。C语言的三种基本程序结构分别...
    99+
    2022-11-13
  • C语言详解strcmp函数的分析及实现
    目录1.函数介绍1.1.函数接口1.2.函数分析1.3.函数的简单使用1.4.函数使用结果分析2.库函数strcmp源代码2.1.库函数源代码2.2.库函数分析3.模拟实现 strc...
    99+
    2022-11-13
  • C语言基础函数用法示例详细解析
    目录函数函数定义函数一般格式C语言函数分类库函数库函数的分类库函数的学习自定义函数函数的参数实际参数形式参数函数的调用传值调用传址调用无参函数调用函数的声明和定义函数的声明函数的定义...
    99+
    2022-11-12
  • 浅析C语言中assert的用法
    assert是C语言中的一个宏,用于在程序中检查特定的条件是否为真。当assert条件为假时,程序会中止执行,并打印出错误消息。as...
    99+
    2023-08-11
    C语言
  • C语言中不定参数 ... 的语法以及函数封装
    目录Intro语法测试依赖库新函数使用测试:遍历并打印不定参数中的值总结 Intro 有一天看C代码看到某个方法有这样的定义:在函数形参列表处,有...的写法,就像Java...
    99+
    2023-01-28
    c语言不定参数函数 c语言不定参数 ... c语言参数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作