Tableau en c, fgets
Fermé
Qinqin
Messages postés
14
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
1 mars 2009
-
19 févr. 2009 à 17:10
Qinqin Messages postés 14 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 1 mars 2009 - 20 févr. 2009 à 09:33
Qinqin Messages postés 14 Date d'inscription dimanche 2 novembre 2008 Statut Membre Dernière intervention 1 mars 2009 - 20 févr. 2009 à 09:33
A voir également:
- Tableau en c, fgets
- Tableau croisé dynamique - Guide
- Afficher un tableau en c - Forum C
- Tableau ascii - Guide
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms. quel mot est formé par les 6 premières lettres de la colonne code ? - Forum Bureautique
- Tableau word - Guide
7 réponses
NookZ
Messages postés
2138
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
7 mars 2013
512
19 févr. 2009 à 17:13
19 févr. 2009 à 17:13
tab2[i]=temp2;
tab2 est défini?
tab2 est défini?
Qinqin
Messages postés
14
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
1 mars 2009
19 févr. 2009 à 17:15
19 févr. 2009 à 17:15
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.
Qinqin
Messages postés
14
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
1 mars 2009
19 févr. 2009 à 19:00
19 févr. 2009 à 19:00
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 817
>
loupius
19 févr. 2009 à 19:20
19 févr. 2009 à 19:20
i = i++ provoque un comportement indéterminé.
Cela n'est pas donc certainement pas équivalent à i++. Donc il ne faut jamais utiliser i=i++.
Cela n'est pas donc certainement pas équivalent à i++. Donc il ne faut jamais utiliser i=i++.
loupius
>
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
19 févr. 2009 à 21:29
19 févr. 2009 à 21:29
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
Qinqin
Messages postés
14
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
1 mars 2009
19 févr. 2009 à 21:49
19 févr. 2009 à 21:49
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 817
19 févr. 2009 à 22:28
19 févr. 2009 à 22:28
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.
Qinqin
Messages postés
14
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
1 mars 2009
19 févr. 2009 à 23:40
19 févr. 2009 à 23:40
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];
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 817
20 févr. 2009 à 00:34
20 févr. 2009 à 00:34
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]);
Qinqin
Messages postés
14
Date d'inscription
dimanche 2 novembre 2008
Statut
Membre
Dernière intervention
1 mars 2009
20 févr. 2009 à 09:33
20 févr. 2009 à 09:33
en fait mon probleme est plus une histoire de pointeur, valeur à un pointeur etc...