程序无法正确读取文件

时间:2020-03-22 20:53:40

标签: c

对于家庭作业,我必须编写一个程序,在其中键入n个整数的字符串,然后打印该字符串的程序,计算算术平均值并制作一个仅包含偶数的新文件,最后打印该新文件在屏幕上。

这是2个程序

#include<stdio.h>
main()
{
    int x,n,i;
    FILE *p;
    p=fopen("podaci.dat","wb");
    printf("n=");
    scanf("%d",&n);
    fwrite(&n,sizeof(int),1,p);
    for(i=0;i<n;i++)
    {
        printf("x=");
        scanf("%d",&x);
        fwrite(&x,sizeof(int),1,p);
    }

    fclose(p);
}
#include<stdio.h>
void stampa(int n,int a[])
{
    int i;
    for(i=0;i<n;i++)
    printf("%5d",a[i]);
    printf("\n");

}


float ars(int n,int a[])
{
int i,s=0;
float ars=0;
for(i=0;i<n;i++)
s+=a[i];
return 1.0*s/n;
}


main()
{
    int i,n;
    FILE *p,*u;
    u=fopen("niz.dat","wb");
    p=fopen("podaci.dat","rb");
    fread(&n,sizeof(int),1,p);
    printf("n=%d\n",n);
    int a[n],m=0;
    for(i=0;i<n;i++)
    {
        fread(&a[i],sizeof(int),1,p);
        if(a[i]%2==0)
        {
            m+=1;

        }
        fwrite(&m,sizeof(int),1,u);
        for(i=0;i<n;i++)
        if(a[i]%2==0)
        {
            fwrite(&a[i],sizeof(int),1,u);
        }
        stampa(n,a);
        printf("ars=%.2f",ars(n,a));
        fclose(p);
        fclose(u);
    }

}

当我键入两个以上的数字时,程序将代替这些数字将其读取为0,有时还会添加数字。

1 个答案:

答案 0 :(得分:1)

您不能声明数组a[n],其中n是变量(在编译时不知道,但只有在读取文件后才知道的数字)。

您可以以太声明a [N],其中N是用#DEFINE定义的足够大的数字

#include <stdio.h>
#include ...

#DEFINE N 10000
//...
int a[N];

或者您必须动态分配a []

int * a;
a = (int*)malloc(sizeof(int)*n);

您可以详细了解此herehere

相关问题