c语言学习进阶-C语言带命令行参数的文件数据批量计算

C语言带命令行参数的文件数据批量计算

(1)假设输入文件中的数据为多行整数,把数据文件命名为“InputData.txt”,也可以命名为任意的文件名,尝试设计一个c 语言程序, 主函数采用带命令行参数的形式,int main(int argc,char argv []),将输入文件名和输出文件名作为命令行参数引入程序对输入数据文件的数据进行计算。例如求取各个数据的三次方,将数据结果输出到数据输出文件中,输出文件的格式是多行整数的文本文件。表示编译程序为FileReadAndWrit3212.exe,那么执行命令行参数:d:>FileReadAndWrit3212.exe InputData.txt OutputData.txt,就会将以上计算结果输出到文件名为OutputData.txt 的文件中。
求取各个数据的三次方c语音代码y=pow(x,3), 或y=x
x*x。
代码如下:

#include<stdio.h>
#include<math.h>
#include<string.h>
#include <ctype.h> 
#include <stdlib.h> 
int main(int argc,char*argv[])
{
	FILE*fp1,*fp2;//文件指针表示的两个流
	if (argc!=3)
	{
		printf("参数输入不正确!");	
		printf("提示:命令 输入文件 输出文件");
	}
		if(fp1==NULL)
	{
		printf("输入文件打开失败");
		return 0;
	}
	fp1=fopen(argv[1],"r");//打开并读取参数argv[1]对应的输入文件
	int a,c, i=0,j=0;
	int lines = 0; //行数
	float x,y;//x为输入的数字,y为输出的数字
	//fp2=fopen(argv[2],"w");//打开并写入参数argv[2]对应的输出文件,与“w”相比“a”也可以写入文件,但是写之前文件不进行格式化
	
	//检测行数//
	while((c = fgetc(fp1))!= EOF)
	{
		if(c=='\n') 
		lines++; 
	} 
	lines = lines+1; 
	fclose(fp1);
    
	int data[ lines ]; //存放运算结果 
	char sdigit [ lines*2]; //检测格式数组

	//判断文件格式/	
	fp1=fopen(argv[1],"r");//打开并读取参数argv[1]对应的输入文件
	while(!feof(fp1))//feof本身是一个非负的整型常量,表明以达到文件末尾
	{
		fscanf(fp1,"%s",sdigit);
		for(j=0;sdigit[j];++j)
		{
			if(isdigit(sdigit[j]))
			{
			//x=sdigit[j];
			//y=pow(x,3);
			//fprintf(fp2,"%f\n",y);//格式化的文件输出,读入并且赋值给实际参数,从第一个参数fp2指定的流中输出内容
			}//返1
			else
			{
				printf("文件中有字母或汉字");
			    //fprintf(fp2,"%c\n",sdigit[j]);//格式化的文件输出,读入并且赋值给实际参数,从第一个参数fp2指定的流中输出内容	
			    exit(0);
			}
		
		}
	}
	fclose(fp1);
	//写入文件/
	//float x,y;//x为输入的数字,y为输出的数字
	fp1=fopen(argv[1],"r");//打开并读取参数argv[1]对应的输入文件
	fp2=fopen(argv[2],"w");//打开并写入参数argv[2]对应的输出文件,与“w”相比“a”也可以写入文件,但是写之前文件不进行格式化
	while(!feof(fp1))//feof本身是一个非负的整型常量,表明以达到文件末尾
	{
		fscanf(fp1,"%f\n",&x);//格式化的文件输入,读入并且赋值给实际参数,从第一个参数fp1指定的流中读入内容
		//scanf("%d",&x);//总是从标准输入流stdin中读入内容
		//y=x*x*x;//计算x的三次方
		data[i]=pow(x,3);
		//printf("data[%d]:%d",i,data[i]);
		//fprintf(fp2,"%f\n",y);//格式化的文件输出,读入并且赋值给实际参数,从第一个参数fp2指定的流中输出内容
		//prinf("%d",&y);//总是从标准输入流stdin中输出内容
		fprintf(fp2,"%d\n",data[i]);//格式化的文件输出,读入并且赋值给实际参数,从第一个参数fp2指定的流中输出内容
		//prinf("%d",&y);//总是从标准输入流stdin中输出内容
		i++;
	}
	fclose(fp1);
	//fclose(fp2);
	return 0;
	if (fclose(fp1)!=0);//关闭文件成功关闭则返回值为0
	{
		printf("文件 %s\n 关闭错误",argv[1]);
	}
	if (fclose(fp2)!=0);
	{
		printf("文件 %s\n 关闭错误",argv[2]);
	}
}
/
//验证
//gcc p.c -o p.exe
//p.exe myinput.txt myoutput.txt
//p.exe
//p.exe myin.txt myoutput.txt

命令编译行执行如图:
在这里插入图片描述
结果在文本文件中呈现如图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值