在C中写入文件和读取文件

问题描述 投票:0回答:1

科尼茨瓦

我正在做一些作业并准备期末考试,但我在这里被困了好几个小时,请帮助我

方阵 (nxn)

将 Even 元素写入 matran.txt,然后从文件中读取并显示在屏幕上

//this is function write down file matrix.txt, and it's work normally 
void infile(int **p,int n)
{
    bool a=false;
    FILE *f=fopen("matran.txt","w");
    if (f==NULL)
    {
        printf ("\nLoi file.");
        exit(1);
    }
    for (int i = 0; i < n; i++) 
      for (int j = 0; j < n; j++) {
        if ((p[i][j]) % 2 == 0) {
          fprintf (f,"%d\t",p[i][j]);
          a=true;
        }
      }   
    if (a) printf ("\nFile da duoc ghi tai ./matrix.txt");
    else printf ("\nKhong co so chan trong ma tran");

}

我知道它有

0->n
的限制,但我不知道
i
的限制是什么,我尝试将限制设置为100,但它仍然打印出3个值,并且显示100个差异地址@_@

//but this didnt work
void DocTep(int **p, int n) {
  int *ptr=(int*)malloc(n*sizeof(int));
  FILE *f = fopen("matran.txt", "r");
  if (f == NULL) {
    printf("\nLoi file.");
    exit (1);
  }
  for (int i = 0; i < n; i++) {
        fscanf(f, "%d ",ptr[i]);
  }

  fclose(f);
  printf ("\n");
  for (int i = 0; i < n; i++) {
    printf ("%d\t",ptr[i]);
  }
}

这是完整的节目

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

void nhapmt (int **p,int n)
{
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      printf("a[%d][%d] = ", i, j);
      scanf("%d", &p[i][j]);
    }
  }
}

void inmt (int **p,int n)
{
    for (int i=0;i<n;i++)
    {
    printf ("\n");
    for (int j=0;j<n;j++)
    {
        printf ("%d\t",p[i][j]);
    }
}
}

void tongcheo(int **p,int n)
{
    int sum=0;
    for (int i=0;i<n;i++)
    {
        sum += p[i][i];
    }   
    printf ("\nTong cac so tren duong cheo chinh la: %d",sum);
}

void tongh(int **p,int n,int h)
{
    int sum=0;
    for (int i=0;i<n;i++)
    {
        sum += p[i][h];
    }   
    printf ("Tong cot %d la: %d",h,sum);
}

void infile(int **p,int n)
{
    bool a=false;
    FILE *f=fopen("matran.txt","w");
    if (f==NULL)
    {
        printf ("\nLoi file.");
        exit(1);
    }
      for (int i = 0; i < n; i++) 
      for (int j = 0; j < n; j++) {
        if ((p[i][j]) % 2 == 0) {
        fprintf (f,"%d\t",p[i][j]);
        a=true;
    }
    }   
    if (a) printf ("\nFile da duoc ghi tai ./matran.txt");
    else printf ("\nKhong co so chan trong ma tran");

}


void DocTep(int **p, int n) {
    int *ptr=(int*)malloc(100*sizeof(int));
  FILE *f = fopen("matran.txt", "r");
  if (f == NULL) {
    printf("\nLoi file.");
    exit (1);
  }
//    fscanf(f,"%d",&ptr[0]);
  for (int i = 0; i < n; i++) {
        fscanf(f, "%d ",ptr[i]);
  }

    fclose(f);
    printf ("\n");
    for (int i = 0; i < n; i++) {
        printf ("%d\t",ptr[i]);
}
}

int main()
{
    int **p,n,h;
    printf ("Hay nhap vao n: ");
    scanf("%d",&n);
    p=(int**)malloc(n*sizeof(int*));
    for (int i=0;i<n;i++){
    p[i]=(int*)malloc(n*sizeof(int));
    }
    nhapmt(p,n);
    inmt(p,n);
    tongcheo(p,n);
    printf ("\nHay nhap vao h: ");
    scanf("%d",&h); 
    tongh(p,n,h);
    infile (p,n);
    DocTep(p,n);
    free(p);
    return 0;
}



阿里加图

c fopen
1个回答
0
投票

DocTep
例程中,你不会提前知道需要阅读多少内容。 (那么
n
参数是从哪里来的?)

如果您需要做的只是打印在

infile
中找到的偶数值,则无需担心管理
**p
的内存或存储这些值。您可以使用
while
循环,当到达文件末尾时终止(
feof()
例程可以告诉您),或者使用
fscanf
的返回值来告知何时没有更多值可供读取.

© www.soinside.com 2019 - 2024. All rights reserved.