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

发布时间:2023年12月21日

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

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

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

文章来源:https://blog.csdn.net/W06164932/article/details/135137651
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。