Tableau en c, fgets
Qinqin
Messages postés
14
Statut
Membre
-
Qinqin Messages postés 14 Statut Membre -
Qinqin Messages postés 14 Statut Membre -
Bonjour,
voila mon probleme.Je n'arrive pas à remplir un tableau de manière constante, je m'explique. Je rempli mais le premier indice ne garde pas sa valeur. tab1[i] a la même valeur partout.
Je doit avoir un probleme avec les pointeurs, mais je ne suis pas un specialiste du c donc ca me passe au dessus de la têtet depuis quelques heures.
char temp [10];
int tab1[50];
while (!feof(fichier)){
fgets (temp, 10,fichier);
tab1[i]=temp;
fgets (temp2, 10,fichier);
tab2[i]=temp2;
i=i++;
}
j'ai abrégé le code en gardant ce qui pose probleme,
merci de vos reponses
voila mon probleme.Je n'arrive pas à remplir un tableau de manière constante, je m'explique. Je rempli mais le premier indice ne garde pas sa valeur. tab1[i] a la même valeur partout.
Je doit avoir un probleme avec les pointeurs, mais je ne suis pas un specialiste du c donc ca me passe au dessus de la têtet depuis quelques heures.
char temp [10];
int tab1[50];
while (!feof(fichier)){
fgets (temp, 10,fichier);
tab1[i]=temp;
fgets (temp2, 10,fichier);
tab2[i]=temp2;
i=i++;
}
j'ai abrégé le code en gardant ce qui pose probleme,
merci de vos reponses
A voir également:
- Tableau en c, fgets
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
7 réponses
oui pardon il est definit
char temp [10],temp[2];
int tab1[50],tab2[50];
while (!feof(fichier)){
fgets (temp, 10,fichier);
tab1[i]=temp;
fgets (temp2, 10,fichier);
tab2[i]=temp2;
i=i++;
}
Ce que je recupère dans fichier ce sont des chiffres
2000
15000
400
char temp [10],temp[2];
int tab1[50],tab2[50];
while (!feof(fichier)){
fgets (temp, 10,fichier);
tab1[i]=temp;
fgets (temp2, 10,fichier);
tab2[i]=temp2;
i=i++;
}
Ce que je recupère dans fichier ce sont des chiffres
2000
15000
400
Ce qui pose problème c'est tab1[i]=temp;
tab1[i] est un entier
temp est un pointeur
Evidemment le programme fonctionne mais ce n'est certainement pas ce que tu veux faire.
D'autre part, si le compilateur était bien réglé, tu devrais t'apercevoir que celui-ci râle.
Bon courage.
tab1[i] est un entier
temp est un pointeur
Evidemment le programme fonctionne mais ce n'est certainement pas ce que tu veux faire.
D'autre part, si le compilateur était bien réglé, tu devrais t'apercevoir que celui-ci râle.
Bon courage.
apparament j'ai trouvé la solution enfin on me l'a donné.
i=i++ n'existe pas en c
i++suffit. je vais essayer ca
i=i++ n'existe pas en c
i++suffit. je vais essayer ca
Un comportement indéterminé: TOUT A FAIT et c'est bien ce que j'ai précisé: 'problème d'effet de bord'
Je viens d'essayer, avec gcc 4.3.2 c'est équivalent, mais ce n'est pas parce qu'il n'y a pas d'effet de bord.. qu'il en est toujours de même.
Ta conclusion est bonne et plus explicite que la mienne: NE PAS UTILISER.
Je viens d'essayer, avec gcc 4.3.2 c'est équivalent, mais ce n'est pas parce qu'il n'y a pas d'effet de bord.. qu'il en est toujours de même.
Ta conclusion est bonne et plus explicite que la mienne: NE PAS UTILISER.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
damned ca ne marche pas, je vous remet le code avec les test
int i=0;
while (!feof(fichier)){
fgets (temp, 10,fichier);
tab1[i]=temp;
puts (tab1[i]);
fgets (temp2, 10,fichier);
tab2[i]=temp2;
i++;
}
puts (tab1[0]);
puts (tab1[1]);
puts (tab1[2]);
et les test donnent :
1000
1001
1002
1002
1002
1002
1002
alors qu'ils devraient donner
1000
1001
1002
1000
1001
1002
en effet les valeurs recupérées et censées être stockées dans le tableau sont 1000, 1001, et 1002
int i=0;
while (!feof(fichier)){
fgets (temp, 10,fichier);
tab1[i]=temp;
puts (tab1[i]);
fgets (temp2, 10,fichier);
tab2[i]=temp2;
i++;
}
puts (tab1[0]);
puts (tab1[1]);
puts (tab1[2]);
et les test donnent :
1000
1001
1002
1002
1002
1002
1002
alors qu'ils devraient donner
1000
1001
1002
1000
1001
1002
en effet les valeurs recupérées et censées être stockées dans le tableau sont 1000, 1001, et 1002
Bizarre ton code. Etonnant même que le compilateur ne dise rien.
Et puis tu ne redonnes pas les déclarations des variables temp et tab. On ne sait pas si tu as changé quelque chose ou pas. Et je vois pas pourquoi tu as deux tableaux tab1 et tab2.
Teste le code suivant :
Si ce n'est pas ce que tu veux, explique pourquoi tu as deux tableaux, redonne leurs déclarations etc.
Et puis tu ne redonnes pas les déclarations des variables temp et tab. On ne sait pas si tu as changé quelque chose ou pas. Et je vois pas pourquoi tu as deux tableaux tab1 et tab2.
Teste le code suivant :
#define MAX 50
char temp[10];
int tab[MAX];
int sz=0;
while (fgets(temp,sizeof temp,fichier)!=NULL && sz<MAX){
tab[sz]=atoi(temp); /*converti le nombre stocké dans la chaîne temp en int*/
sz++;
}
for(int i=0;i<sz;i++) {
printf("%d\n",tab[i]);
}
Si ce n'est pas ce que tu veux, explique pourquoi tu as deux tableaux, redonne leurs déclarations etc.
en fait j'ai dans le fichier dans lequel je vais chercher les infos une alternance de lignes. Je met la première dans un tableau, la deuxième dans un autre tableau, la 3ème dans le premier tableau etc...
J'ai essayé tellement de trucs que je sais plus trop ou j'en suis en fait, donc je doit pas avoir la meilleure methode c'est sur.
avec la methode atoi il me donne une erreur de segmentation
Les declarations des tableaux sont :
int tab1[50], tab2[50];
char temp[10], temp2[10];
J'ai essayé tellement de trucs que je sais plus trop ou j'en suis en fait, donc je doit pas avoir la meilleure methode c'est sur.
avec la methode atoi il me donne une erreur de segmentation
Les declarations des tableaux sont :
int tab1[50], tab2[50];
char temp[10], temp2[10];
D'accord, je comprends mieux.
Essaie le code suivant qui correspondre à ce que tu souhaites faire :
Essaie le code suivant qui correspondre à ce que tu souhaites faire :
#define MAX1 50
#define MAX2 50
char temp[10];
int tab1[MAX1];
int tab2[MAX2];
int num;
int sz1;
int sz2;
num=0;
sz1=sz2=0;
while(fgets(temp,sizeof temp,fp)!=NULL && sz1<MAX1 && sz2<MAX2){
switch(num){
case 0:
tab1[sz1++]=atoi(temp);
num=1;
break;
case 1:
tab2[sz2++]=atoi(temp);
num=0;
break;
}
}
fclose(fichier),fichier=NULL;
//affichage
for(int i=0;i<sz1;i++)
printf("%d\n",tab1[i]);
//affichage
for(int i=0;i<sz2;i++)
printf("%d\n",tab2[i]);