A voir également:
- Aide! lecture de fichier en Code C
- Fichier bin - Guide
- Code ascii - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
8 réponses
Salut,
Tu n'as pas initialiser ton tableau tbl.
Tu peux par exemple faire int tab[255]; si tu sais que tu n'auras pas plus de 256 nombres sur une ligne. Sinon tu devras faire de l'allocation dynamique.
Pour lire la deuxième ligne, tu fais une deuxième boucle while avec la condition feof() pour détecter la fin du fichier.
Lorsque tu arrives à "\n", c'est que tu changes de ligne.
Cordialement
Tu n'as pas initialiser ton tableau tbl.
Tu peux par exemple faire int tab[255]; si tu sais que tu n'auras pas plus de 256 nombres sur une ligne. Sinon tu devras faire de l'allocation dynamique.
Pour lire la deuxième ligne, tu fais une deuxième boucle while avec la condition feof() pour détecter la fin du fichier.
Lorsque tu arrives à "\n", c'est que tu changes de ligne.
while(! feof(ptr_fichier)) { do{ fscanf(ptr_fichier, "%d", &tbl[ctr]); printf("tbl[ctr]=%d\n", tbl[ctr]); ctr++; }while(tbl[ctr-1]!='\n'); /* et là tu es repartie pour lire les lignes suivantes ;) */ }
Cordialement
Salut,
pourquoi pas
pourquoi pas
#include <stdio.h> #include <stdlib.h> int main() { FILE *ptr_fichier; int tbl[255]; int ctr=0; if((ptr_fichier=fopen("Refroid.txt", "r")) == NULL) return -1; do{ fscanf(ptr_fichier, "%d", &tbl[ctr]); printf("tbl[%d]=%d\n",ctr, tbl[ctr]); ctr++; }while(! feof(ptr_fichier)); system("PAUSE"); return 0; }
J'ai essayé tous les codes suggérés, puis une erreur fatale se produit toujours.
Bonjour,
Merci infiniment pour votre aide.
J'ai fais des changements a mon code selon ce que vouz m'avez expliquer. Toutefois, la boucle n'arrete pas lorsque le pointeur est rendu au bout de la 2e ligne. A la sortie du programme, les deux premieres lignes apparraissent, mais une gamme de valeurs apparaissent par apres. Pourquoi la boucle avec le fscanf continue-t-elle apres la fin de la ligne? J'ai pourtant preciser un do while(tbl[ctr-1] != 'n') <-- est-ce bien ce que je dois faire?
Ce que j'essaie de faire, c'est de compter le nombre d'éléments dans la première ligne et le nombre d'éléments dans la deuxième ligne pour ensuite créer une matrice qui a ces dimensions. Je ne veux donc pas lire toutes les lignes du texte en meme temps. (je ne suis pas sure si c'est ce que ton fesait, mais j'ai eu l'impression que oui)
Voici mon nouveau code:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *ptr_fichier;
int tbl[17]={0}, tbl2[21]={0};
int valeur;
int ctr=0;
int nb_rangees=0, nb_colonnes=0;
ptr_fichier=fopen("Refroid.txt", "r");
if (ptr_fichier!=NULL)
{
do
{
fscanf(ptr_fichier, "%d", &tbl[ctr]);
printf("%d\n", tbl[ctr]);
ctr++;
nb_rangees++;
if(tbl[ctr]=='n')
nb_rangees--;
}
while(tbl[ctr-1]!='\n');
ctr=0;
do
{
fscanf(ptr_fichier, "%d", &tbl2[ctr]);
printf("%d\n", tbl2[ctr]);
ctr++;
nb_rangees++;
if(tbl2[ctr]=='n')
nb_colonnes--;
}
while(tbl2[ctr-1]!='n');
}
else{
printf("fichier n'existe pas.");
}
system("PAUSE");
return 0;
}
Bonjour,
Merci infiniment pour votre aide.
J'ai fais des changements a mon code selon ce que vouz m'avez expliquer. Toutefois, la boucle n'arrete pas lorsque le pointeur est rendu au bout de la 2e ligne. A la sortie du programme, les deux premieres lignes apparraissent, mais une gamme de valeurs apparaissent par apres. Pourquoi la boucle avec le fscanf continue-t-elle apres la fin de la ligne? J'ai pourtant preciser un do while(tbl[ctr-1] != 'n') <-- est-ce bien ce que je dois faire?
Ce que j'essaie de faire, c'est de compter le nombre d'éléments dans la première ligne et le nombre d'éléments dans la deuxième ligne pour ensuite créer une matrice qui a ces dimensions. Je ne veux donc pas lire toutes les lignes du texte en meme temps. (je ne suis pas sure si c'est ce que ton fesait, mais j'ai eu l'impression que oui)
Voici mon nouveau code:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *ptr_fichier;
int tbl[17]={0}, tbl2[21]={0};
int valeur;
int ctr=0;
int nb_rangees=0, nb_colonnes=0;
ptr_fichier=fopen("Refroid.txt", "r");
if (ptr_fichier!=NULL)
{
do
{
fscanf(ptr_fichier, "%d", &tbl[ctr]);
printf("%d\n", tbl[ctr]);
ctr++;
nb_rangees++;
if(tbl[ctr]=='n')
nb_rangees--;
}
while(tbl[ctr-1]!='\n');
ctr=0;
do
{
fscanf(ptr_fichier, "%d", &tbl2[ctr]);
printf("%d\n", tbl2[ctr]);
ctr++;
nb_rangees++;
if(tbl2[ctr]=='n')
nb_colonnes--;
}
while(tbl2[ctr-1]!='n');
}
else{
printf("fichier n'existe pas.");
}
system("PAUSE");
return 0;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
Tu utilises 'n' au lieu de '\n'.
Sinon tu peux essayer ceci aussi ;)
Tu utilises 'n' au lieu de '\n'.
Sinon tu peux essayer ceci aussi ;)
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char buffer1[255]; int ligne,colonne; if((ptr_fichier=fopen("Refroid.txt", "r")) == NULL) return -1; /*lecture première ligne*/ fgets(buffer,255,fp); /*décompte nombre d'élément*/ ligne=0; while(buffer[ligne++]!='\n'); fgets(buffer2,255,fp); colonne=0; while(buffer[colonne++]!='\n'); system("PAUSE"); return 0; } Tu peux utiliser ce code là, et l'adapter selon tes besoins.
Mon problème c'est que je peux seulement determiner la quantite maximale de nombre que contiendra mon tableau.
Si j'utilise fgets, je doit specifier un nombre de caracteres, que je ne connais pas.
Est-ce possible de faire arreter fscanf au bout de la ligne?
Comment est-ce que je peux ensuite commencer la lecture de la deuxieme ligne de code?
Je suis desolee pour tout le trouble, je n'en connais pas beaucoup au sujet de la lecture de fichiers.
Merci,
Aline
Si j'utilise fgets, je doit specifier un nombre de caracteres, que je ne connais pas.
Est-ce possible de faire arreter fscanf au bout de la ligne?
Comment est-ce que je peux ensuite commencer la lecture de la deuxieme ligne de code?
Je suis desolee pour tout le trouble, je n'en connais pas beaucoup au sujet de la lecture de fichiers.
Merci,
Aline
Salut,
Avec fgets(), tu spécifies la longueur maximum de caractères à copier dans le buffer, mais cela s'arrêtera en fin de ligne dans tous les cas. Donc tu mets une valeur grande. De plus, cette méthode est conseillée de brider le nombre maximum de caractère afin d'éviter des attaques de type débordement de tampons
Cordialement.
Avec fgets(), tu spécifies la longueur maximum de caractères à copier dans le buffer, mais cela s'arrêtera en fin de ligne dans tous les cas. Donc tu mets une valeur grande. De plus, cette méthode est conseillée de brider le nombre maximum de caractère afin d'éviter des attaques de type débordement de tampons
Cordialement.