做業訓練------經過讀取c.txt文件中的內容等號右值,並將右值的最大值、最小值、平均值打印到屏幕上。

這篇博客是學習傳智播客c++教程的做業,經過在網上進行蒐集來完成,可是網上有類似的代碼,可是結果老是有點問題,因此本文寫了這篇記錄下。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;
}

下面是運行後的結果:數組

相關文章
相關標籤/搜索