作业训练------通过读取c.txt文件中的内容等号右值,并将右值的最大值、最小值、平均值打印到屏幕上。

2022-10-31,,,,

这篇博客是学习传智播客c++教程的作业,通过在网上进行搜集来完成,但是网上有相似的代码,但是结果总是有点问题,所以本文写了这篇记录下。

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//3.1去除字符串右边的空格
char *TrimStrR(char *SrcStr)
{
if (SrcStr == NULL)
{
printf("TrimStrR function is error!");
return NULL;
}
int i = ;
int iLen = strlen(SrcStr);
for(i = (iLen -);i>=;i--)
{
if(SrcStr[i] == ' ')
SrcStr[i] = ;
else
break;
}
return SrcStr;
}
//3.2去掉字符串左边的空格
char *TrimStrL(char *SrcStr)
{
if (SrcStr == NULL)
{
printf("TrimStrR function is error!");
return NULL;
}
if(SrcStr[] != ' ')
{
return SrcStr;
}
int i = ;
int iLen = strlen(SrcStr);
if(iLen == )
{
return SrcStr;
}
char *stemp = (char*)malloc(iLen+);
memset(stemp,,iLen+);
memcpy(stemp,SrcStr,iLen);
for(i = ;i<iLen;i++)
{
if(SrcStr[i] != ' ')
{
strcpy(stemp,SrcStr+i);
break;
}
}
strcpy(SrcStr,stemp);
free(stemp);
return SrcStr;
}
//3.3解析带等号的字符串并去掉字符串传尾部空格
void ParseValueStr(char *Des,char* SrcStr)
{
int iLen = strlen(SrcStr);
if(iLen == )
{
return ;
}
if((SrcStr[iLen -] == '\n')||(SrcStr[iLen -] == '\r'))
{
SrcStr[iLen -] = '\0';
}
if(iLen > )
{
if((SrcStr[iLen -] == '\n')||(SrcStr[iLen -] == '\r'))
{
SrcStr[iLen -] = '\0';
}
}
TrimStrR(SrcStr);
int i = ;
for(i= ;i<iLen;i++)
{
if((*SrcStr) == '=')
{
strcpy(Des,++SrcStr);
break;
}
++SrcStr;
}
TrimStrL(Des);
}
//3.4计算数组buf中的最大值,参数bufsize为参数buf的元素数量
int max(const int *buf,const int bufsize)
{
int tmp = buf[];
int i = ;
for(i = ;i<bufsize;i++)
{
if(tmp <= buf[i])
tmp = buf[i];
}
return tmp;
}
float avg(const int *buf,const int bufsize)
{
float sum = ;
int i = ;
for(i = ;i<bufsize;i++)
{
sum += buf[i];
}
return sum/bufsize;
}
int min(const int *buf,const int bufsize)
{
int tmp = buf[];
int i = ;
for(i = ;i<bufsize;i++)
{
if(buf[i] == )
continue;
if(tmp >= buf[i])
tmp = buf[i];
}
return tmp;
}
int main(int args, char*argc[])
{
if (args < )
{
printf("parameters is error!\n");
}
char buf[];
char value[];
int values[];
memset(values,,sizeof(values));
FILE* fp = fopen(argc[], "r");
int i = ;
int j = ;
while(!(feof(fp)))
{
memset(buf,,sizeof(buf));
memset(value,,sizeof(value));
fgets(buf,sizeof(buf),fp);
ParseValueStr(value,buf);
values[i] = atoi(value);
i++; }
for(j = ;j<i-;j++)
{
printf("%d\n",values[j]);
}
fclose(fp);
printf("最大值:%d\n",max(values,i));
printf("最小值:%d\n",min(values,i));
printf("平均值:%f\n",avg(values,i));
return ;
}

下面是运行后的结果:

作业训练------通过读取c.txt文件中的内容等号右值,并将右值的最大值、最小值、平均值打印到屏幕上。的相关教程结束。

《作业训练------通过读取c.txt文件中的内容等号右值,并将右值的最大值、最小值、平均值打印到屏幕上。.doc》

下载本文的Word格式文档,以方便收藏与打印。