文件练习中的读/写过程中的执行问题(新手)

时间:2019-12-16 20:57:15

标签: c

我写了一个程序来从.txt文件中读取整数并将其放入数组中,它可以很好地编译,但是会要求整数个数然后停止

#include <stdlib.h>
#include <stdio.h>
void genererN ( int n){
    int i=0;
    FILE* fichier = NULL;
    fichier=fopen("valeurs.txt","w");
    while (i<n){
        fprintf(fichier,"\n%d\n",rand());
        i++;
    }
}

void replirtab (int **t,int n){
    int i=0;int m;
    FILE* fichier = NULL;
    fichier=fopen("valeurs.txt","r");
    char stre[999999] = "";
    while(i<n){
        fgets(stre, 999999, fichier);
        m = atoi(stre);
        *t[i]=m;
        i++;
    }
}

void affichertab (int *t,int n){
    int i=0;
    while(i<n){
        printf("%d\n",t[i]);
        i++;
    }
}

这是我的主要功能,我要求随机生成的整数的数量并使用我的功能

#include <stdio.h>
#include <stdlib.h>
#include "source1.h"
int main()
{
    int n;
    printf("donner le nombre de valeurs ");
    scanf("%d",&n);
    int T[n];

    genererN(n);
    replirtab(T,n);
    affichertab(T,n);
    return 0;
}

和标题

#ifndef SOURCE1_H_INCLUDED
#define SOURCE1_H_INCLUDED

void genererN ( int n);
void replirtab (int *t,int n);
void affichertab (int *t,int n);

#endif // SOURCE1_H_INCLUDED

1 个答案:

答案 0 :(得分:0)

解决以下问题:

  1. 写入文件后不会关闭文件,因此不会刷新缓冲区。
  2. 您在每个数字前写了一个额外的换行符,但是阅读时不会跳过它。
  3. replirtab()需要一个指针数组,但是该数组包含整数,而不是指针。无需通过引用间接进行。将数组传递给函数时,将传递指向第一个元素的指针。
#include <stdlib.h>
#include <stdio.h>
void genererN ( int n){
    int i=0;
    FILE* fichier = NULL;
    fichier=fopen("valeurs.txt","w");
    if (!fichier) {
        printf("Unable to write file\n");
        exit(1);
    }
    while (i<n){
        fprintf(fichier,"%d\n",rand());
        i++;
    }
    fclose(fichier);
}

void replirtab (int *t,int n){
    int i=0;int m;
    FILE* fichier = NULL;
    fichier=fopen("valeurs.txt","r");
    if (!fichier) {
        printf("Unable to read file\n");
        exit(1);
    }
    char stre[999999] = "";
    while(i<n){
        fgets(stre, 999999, fichier);
        m = atoi(stre);
        t[i]=m;
        i++;
    }
    fclose(fichier);
}

void affichertab (int *t,int n){
    int i=0;
    while(i<n){
        printf("%d\n",t[i]);
        i++;
    }
}