作业训练------通过读取c.txt文件中的内容等号右值,并将右值的最大值、最小值、平均值打印到屏幕上。
这篇博客是学习传智播客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 = 0; int iLen = strlen(SrcStr); for(i = (iLen -1);i>=0;i--) { if(SrcStr[i] == ' ') SrcStr[i] = 0; else break; } return SrcStr; } //3.2去掉字符串左边的空格 char *TrimStrL(char *SrcStr) { if (SrcStr == NULL) { printf("TrimStrR function is error!"); return NULL; } if(SrcStr[0] != ' ') { return SrcStr; } int i = 0; int iLen = strlen(SrcStr); if(iLen == 0) { return SrcStr; } char *stemp = (char*)malloc(iLen+1); memset(stemp,0,iLen+1); memcpy(stemp,SrcStr,iLen); for(i = 0;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 == 0) { return ; } if((SrcStr[iLen -1] == '\n')||(SrcStr[iLen -1] == '\r')) { SrcStr[iLen -1] = '\0'; } if(iLen > 1) { if((SrcStr[iLen -2] == '\n')||(SrcStr[iLen -2] == '\r')) { SrcStr[iLen -2] = '\0'; } } TrimStrR(SrcStr); int i = 0; for(i= 0;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[0]; int i = 0; for(i = 0;i<bufsize;i++) { if(tmp <= buf[i]) tmp = buf[i]; } return tmp; } float avg(const int *buf,const int bufsize) { float sum = 0; int i = 0; for(i = 0;i<bufsize;i++) { sum += buf[i]; } return sum/bufsize; } int min(const int *buf,const int bufsize) { int tmp = buf[0]; int i = 0; for(i = 0;i<bufsize;i++) { if(buf[i] == 0) continue; if(tmp >= buf[i]) tmp = buf[i]; } return tmp; } int main(int args, char*argc[]) { if (args < 2) { printf("parameters is error!\n"); } char buf[100]; char value[100]; int values[32]; memset(values,0,sizeof(values)); FILE* fp = fopen(argc[1], "r"); int i = 0; int j = 0; while(!(feof(fp))) { memset(buf,0,sizeof(buf)); memset(value,0,sizeof(value)); fgets(buf,sizeof(buf),fp); ParseValueStr(value,buf); values[i] = atoi(value); i++; } for(j = 0;j<i-1;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 0; }
下面是运行后的结果: