首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

帮小弟我看看哪里错啦!文件data.in 是一维数组: 56 ,34 ,1,6 ,12 ,45 ,78 ,98 ,23 ,67,5,求出最大值

2013-04-05 
帮我看看哪里错啦!文件data.in 是一维数组: 56 ,34 ,1,6 ,12 ,45 ,78 ,98 ,23 ,67,5,求出最大值#include

帮我看看哪里错啦!文件data.in 是一维数组: 56 ,34 ,1,6 ,12 ,45 ,78 ,98 ,23 ,67,5,求出最大值
#include <stdio.h>
#define CORRECT         0
#define FILE_OPEN_ERROR 1
#define FILE_EMPTY      2
#define INPUT_ERROR     3
#define n 10

int main()
{
        int i, j, t;
        int a[n];
        int Max = a[0];

        for(i = 0; i < n; i ++)
        if(Max < a[i])
                Max = a[i];

        FILE    *fp;

        fp              = fopen("data.in", "r");

        if(fp   == NULL)
        {
                fprintf(stderr,"Can't open file!\n");
                fclose(fp);
                return FILE_OPEN_ERROR;

        }
        for(i   = 0; i<n; i ++)
        {


                        if(t!=1)
                        {
                                fprintf(stderr, "File Empty!\n");
                                fclose(fp);
                                return FILE_EMPTY;
                                }

                        if(a[i] < 0)
                        {
                                fprintf(stderr,"input Error!\n");
                                fclose(fp);
                                return INPUT_ERROR;


                        }
                        if(feof(fp))
                                break;
    for(i = 0;i <= n; i ++)
        {
                if(Max < a[i])
                        Max = a[i];
        }
                printf("%d ", Max);
        }

        printf("\n");
        return CORRECT;
}
[解决办法]
不知道你的t是干什么用的,而且你的数组根本就没有赋值,怎么比较?

       // for(i = 0; i < n; i ++)
      //if(Max < a[i])
     //        Max = a[i];

        FILE    *fp=NULL ;
上面的可以注释掉。
两个循环分开写
  for(i   = 0; i<n; i ++)
      {


             if(t!=1)
             {
              fprintf(stderr, "File Empty!\n");
              fclose(fp);
              return FILE_EMPTY;
             }

             
             if(feof(fp))
                  break;
 fscanf(fp,"%d",&a[i]);

 if(a[i] < 0)
             {
                fprintf(stderr,"input Error!\n");
                fclose(fp);
                return INPUT_ERROR;
             }
  }
        for(i = 0;i <= n; i ++)
        {
                if(Max < a[i])
                        Max = a[i];


        }

大概就是这样
[解决办法]


#include "stdio.h"
#include <stdlib.h>
int average(char *pFilePath);
void main()
{
FILE *fp;
int nData[10];
for(int i=0;i<10;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",nData+i);
}
fp = fopen("c:\\data.txt", "wb");//b表示以二进制的形式写入文件
if(fp!=NULL)
{
fwrite(nData,sizeof(int),10,fp);
fclose(fp);
//写完文件后,可以看一下文件大小,40个字节,
//其实就是数组的大小  sizeof(int)*10 = 40   以前在学校里没搞明白的问题,现在明白了
}

printf("平均值大小:%d\n",average("c:\\data.txt") );


system("pause");
}

int average(char *pFilePath)
{
int nData[10]={0};
FILE *fp;
fp = fopen(pFilePath, "rb");//b表示以二进制的形式
if(fp!=NULL)
{
fread(nData,sizeof(int),10,fp);
fclose(fp);
}
else
{
printf("读取文件出错了...");
return 0 ;
}

int nSum = 0 ;
for(int i=0;i<10;i++)
{
printf("第%d个数:\t内存地址%8x\t值:%d\n",i+1,nData+i,*(nData+i));
nSum += *(nData+i) ;
}
return nSum/10;
}




看看上面的代码,复制去调试下

[解决办法]
供楼主参考:

/*
如果文件data.in的内容如下:
56,34,1,6,12,45,78,98,23,67,5,
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LINE 256// 假定每行最大长度是255

int main(int argc, char** argv)
{
char* p;
FILE* fp;

char buf[LINE];
memset(buf, 0, LINE);

int temp = 0;
int MAX = 0;

int sum = 0;
int index = 0;

fp = fopen("E://data.in", "rb");
if(fp == NULL)
{
printf("Can't open file!\n");
fclose(fp);
return 1;
}

while(!feof(fp))
{
fread(buf, sizeof(char), LINE - 1, fp);
p = strtok(buf, ",");
while(p)
{
//printf("%s\n", p);
temp = atoi(p);
sum += temp;
++index;

if(temp > MAX)
{
MAX = temp;
}

p = strtok(NULL, ",");
}
}
fclose(fp);

printf("最大的数字是:%d\n", MAX);
printf("平均值为:%f\n", (float)sum / (float)index);

return 0;
}

热点排行