C语言之输入输出和字符(1)

本文介绍了C语言中的getchar函数用于字符输入,以及EOF的概念和使用。通过while循环和switch语句,展示了如何利用getchar进行字符复制输出,并给出了一个字符计数的例子,包括如何处理EOF和使用数组cnt存储字符出现次数。
摘要由CSDN通过智能技术生成

程序一般会采用某种形式进行字符的输入输出,下面我们来学习字符和输入输出的关系。

getchar函数和EOF

在前面的学习中我们知道一个进行字符输出的putchar函数,接下来我们学习一个关于字符输入的getchar函数,灵活使用这些函数就可以进行将字符输入直接输出的操作了。

我们需要使用一段代码来具体的演示上面的功能:

#include<stdio.h>

int main()
{
	int ch;
	while((ch = getchar()) != EOF)
		putchar(ch);
	
	return 0;
}//按下Ctrl+z结束循环

getchar函数的功能是读取字符并将其返回,输入结束或读取过程发生错误就会返回EOF值。

getchar函数
头文件#include<stdio.h>
原型int getchar( )
说明从标准输入流中读取下一个字符(若存在)
返回值返回读入的字符,读到文件夹末尾或发生错误,返回EOF

对象式宏EOF的名称来源于END OF FILE,在<stdio.h>头文件,EOF被定义为负值,如下:

#define EOF -1

如果未将<stdio.h>头文件包含进来,那么EOF就没有定义,这时程序不能编译和运行

 从输入复制到输出

本程序实际上只是由while语句构成:

(ch = getchar()) != EOF

先看这个语句执行的结构图:

下面我们对该图进行解释:

▷1处将读取的字符赋值给ch,但是当输入结束或者发生某种错误时,ch就会被赋值给EOF

▷对赋值表达式进行判断后,会得到赋值后左操作数的类型和值,因此ch = getchar()等价赋值后的ch,在2处会比较该值和EOF

▷这样一来,只要读取的字符没有问题,就会执行while语句的循环体,并通过putchar函数显示字符,当输入结束或者发生某种错误时,while语句执行结束。

如果不使用控制表达式来表示赋值和比较,则while语句如下:

while(1)
	{
		ch = getchar();
		if(ch == EOF)
			break;
		putchar(ch);
	}

EOF的定义

在需要对象式宏EOF的程序中,如果不包含<stdio.h>头文件,进行如下定义式是不行的:

#define EOF -1

因为EOF岁规定为负,但不一定是-1,在EOF的值不为-1的编译器或运行环境中,进行手动定义程序时难以保证编译和运行结果的正确性。

数字字符计数

输入字符,计算各字符出现的次数:

#include<stdio.h>

int main()
{
	int i, ch;
	int cnt[10] = {0};
	
	while((ch = getchar()) != EOF )
	{
		switch(ch)
		{
		case '0':cnt[0]++; break;
			break;
		case '1':cnt[1]++; break;	
			break;
        case '2':cnt[2]++; break;
			break;
		case '3':cnt[3]++; break;
			break;
		case '4':cnt[4]++; break;
			break;
		case '5':cnt[5]++; break;
			break;
		case '6':cnt[6]++; break;
			break;
		case '7':cnt[7]++; break;
			break;
		case '8':cnt[8]++; break;
			break;
		case '9':cnt[9]++; break;
			break;
		}
	}
	printf("数字字符出现的字符\n");//记得输入完数字字符后按下Ctrl+z后再次按下回车
	for(i = 0; i < 10 ; i++)
		printf("'%d': %d\n", i, cnt[i]);
	
	return 0;
}

我们接下来进行解释:

字符出现的次数储存在int[10]型数组cnt中,字符‘0’,‘1’……‘9’出现的次数分别储存在cnt[0]、cnt[1]……cnt[0]中。

因为while语句的循环体是Switch语句,所以当getchar函数的返回值不为EOF时,正确读入字符,进入Switch语句。

Switch语句对上面十个语句进行处理会显得比较冗长,另外与各个字符对应的数组cnt的元素会递增,例如:

ch为‘0’,则cnt[0]的值递增,如果ch为‘1’,则cnt[1]的值递增。

数组cnt的作用是保存数字字符‘0’—‘9’的出现次数,下标也是0—9,因此只要将数字字符转换为对应的下标值就能更简单的实现目标

如数字字符‘0’可以转换为整数0,数字字符‘9’转换为整数9

发烧了,难受死我了,下一部分等有时间再写吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学海无涯.苦作舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值