c语言命令行传参输入要读入的文件,统计文件中字符的个数

前言

本文主要实现功能:用c语言编写程序,实现从命令行传参输入要读入的文件,并动态分配用于保存文件数据内容的数组内存,统计文件中字符的个数,并将文件内容打印输出。

  • 注 (1)本文中统计字符个数的程序只针对字符之间以空格隔开,并且数据之间只能有一个空格,同时行首不能以空格开始,但对于行数,和每行有多少个数据无要求。
    (2)对于数据,为字符,整型数字,字符串等都同样适用(对于字符串,空格与空格之间只算一个字符),但如果要打印结果,则只能为字符,因为文中定义的为char型指针(为了读文件需要,fgetc函数要求保存文件内容的数组为char型)

对于如何将数据保存到文件中,以及关于动态内存分配的问题,可参考我的另一篇博客:
c语言从命令行输入数据,并保存到文件中

主程序

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main(int argc,char* argv[])   //命令行传参,argc代表传入参数个数,argv表示传入的参数
{
	char *a_in;  //用于保存从文件中读入的数据
	int i;
	int count1=-1;  //统计文件中字符个数
	FILE *in1;  //用于指向文件地址
	
	 if(argc!=2)   //判断输入参数个数,如果不为2个就报错
    {
        printf("参数个数错误");
        return -1;
    }
	
	in1=fopen(argv[1],"r");   //打开文件,只读,argv[1]表示文件的第二个参数,第一个参数为argv[0],表示运行的命令参数
	if(in1==NULL)  //无法打开文件
	{  
		printf("File cannot open! " );  
		//exit;  
		return 0;
	}  

	a_in = (char*)malloc(sizeof(char)*100);  //动态内存分配
	if (!a_in)  //分配内存失败
    {
       printf("内存分配失败");
        return-1;
    }
	printf("c_data文件中的数据为:\n");
	while((*(a_in)=fgetc(in1))!=EOF)  //只要未到文件末尾就继续读
    {
		printf("%s\t",a_in);  //打印文件内容,此处打印的文件数据为字符
       if(*(a_in)=='\n' || *(a_in)==' ')    //判断不是空格或换行就计数
	   {
		   count1++;  //统计有多少个数
	   }
	}
	
printf("\n");
printf("c_data.txt中数字个数为:%d\n",count1);  //打印计数结果

fclose(in1);  //关闭文件指针
return 0;
free(a_in);//释放第一维指针 
return 0;

}

文件内容为26个英文字母,以空格隔开,打印时按行打印。
文件内容如下:
在这里插入图片描述

运行结果

在这里插入图片描述
因为加了tab键,所以打印结果时从第二行开始会先有一个tab空格。

对于同时含有整型数字,double型数字,以及字符时同样适用。
但由于打印文件内容包含数字,字符,打印时对于数字会有点乱码,所以这里就不打印结果了,只统计个数。
此时文件内容为:
在这里插入图片描述

运行结果

C:\Users\CL\Desktop\学习\C\conv\fprintf>tcc read.c

C:\Users\CL\Desktop\学习\C\conv\fprintf>read.exe c_data.txt

c_data.txt中数字个数为:64

到这里就成功读入文件,并计算出文件中数据个数。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值