亲宝软件园·资讯

展开

在C语言中getchar的使用方法和读取规则讲解

(unstoppable) 人气:0

前言

今天为大家分享getchar在C语言中的使用

一、getchar是什么?

getchar中文意思是获取字符,getchar函数从标准输入输出里读取下一个字符,返回类型为int整形,返回用户输入的ASCII码值,如果到达文件末尾或者出错返回EOF

二、getchar的使用方法

1.只获取一次(字符/字符串)的代码样例

代码如下(示例):

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

代码执行结果

在这里插入图片描述

2.循环获取(字符/字符串)的代码样例

代码如下(示例):

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

注意事项
1.这里的EOF并不是输入EOF循环结束
2.EOF的真实值是-1
3.这里的Ctrl+z的效果便是EOF

代码执行结果

在这里插入图片描述

到这里有些细心的朋友就会发现代码里面并没有换行指令为什么运行的结果会自动换行?

getchardu读取字符的时候真的是在键盘上读取的吗?
getchar             缓冲区              键盘
其实在getchar和键盘之间有个缓冲区,在缓冲区是空
的时候,getchar就会等待键盘输入字符,当用户输入
A时其实多输入了一个回车,这是缓冲区里面就有A\n
getchar首先读取了A然后输出,然后又上去读取了\n
再输出\n就达到了换行的效果,所以B会在第三行输入

三、getchar的读取规则

讲了这么多可能很多人都不明白这么一个代码有什么用呢?其实在很多地方都会用到,比如模拟用户登入场景。但是写这个代码的时候就要注意getchar的读取规则
代码如下(示例)

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

代码运行结果

在这里插入图片描述

在这里我们看到都还没确认就直接输出确认失败,到这里大家应该都明白了是什么问题吧?没错就是\n的问题,这里getchar发现缓冲区里面还有一个\n就没等我们输入直接把\n读走
那应该如何解决呢?
代码如下(示例)

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

代码运行结果

在这里插入图片描述

接下来我们再想大家思考一个问题,当密码里面有空格的时候还会确认成功吗?

在这里插入图片描述

没错还是会失败,这又是为什么呢?因为数组把空格前面的123456读走了,但是缓冲区里还剩下空格abcdef\n所以getchar还是会读取缓冲区里面的东西
那该怎么解决呢?
代码如下(示例)

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:>");
	scanf("%s", password);
	int temp = 0;
	while((temp=getchar())!='\n');
	{
		;
	}
	printf("请确认密码(Y/N):>");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功");
	}
	else
	{
		printf("确认失败");
	}
	return 0;
}

代码运行结果

在这里插入图片描述

总结

从上面我们学习到了getchar,发现其实getchar的使用很简单就是读取字符,但是难的是它的读取字符是的规则,所以我们在使用getchar的时候一定要慎重思考它的读取规则。

加载全部内容

相关教程
猜你喜欢
用户评论