Manipulation des fichiers en C
Fermé
dalayla
Messages postés
4
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
30 avril 2010
-
28 avril 2010 à 16:22
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 30 avril 2010 à 15:16
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 30 avril 2010 à 15:16
A voir également:
- Manipulation des fichiers en C
- Renommer des fichiers en masse - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Explorateur de fichiers - Guide
- Fichiers bin - Guide
- Fichiers epub - Guide
7 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
30 avril 2010 à 15:16
30 avril 2010 à 15:16
le programme afonctionné car le i et j sont initialisé dans la boucle for,
Non. Ce n'est pas comme ça que ça marche.
int i,j, cod;
int tab[i][j];
Lorsque tu fais ton tableau int tab[i][j], ton compilateur (s'il est conforme C99, pas évident), va réserver une zone de i*j*sizeof(int) bytes dans la pile. Le problème est : que vaut i et j à ce moment là ? => Première erreur. Pour corriger, relis mon précédent post.
Ensuite tu utilises bool b. Le type bool n'est pas connu en C. Tout au plus tu peux utiliser _Bool (en C99) avec <stdbool.h> ou définir le type toi-même.
return 0, break et continue n'ont rien à voir entre eux.
L'instruction "continue" permet de passer à la prochaine itération.
L'instruction "break" permet de sortir de la boucle.
L'instruction return, permet de terminer la fonction.
return 0 (et pas besoin de parenthèse autour du 0, car ce n'est pas une fonction mais une instruction) dans la fonction main quitte le programme en disant que tout s'est bien déroulé.
Voilà pourquoi il faut le mettre à la fin de ton main().
Cdlt,
Non. Ce n'est pas comme ça que ça marche.
int i,j, cod;
int tab[i][j];
Lorsque tu fais ton tableau int tab[i][j], ton compilateur (s'il est conforme C99, pas évident), va réserver une zone de i*j*sizeof(int) bytes dans la pile. Le problème est : que vaut i et j à ce moment là ? => Première erreur. Pour corriger, relis mon précédent post.
Ensuite tu utilises bool b. Le type bool n'est pas connu en C. Tout au plus tu peux utiliser _Bool (en C99) avec <stdbool.h> ou définir le type toi-même.
return 0, break et continue n'ont rien à voir entre eux.
L'instruction "continue" permet de passer à la prochaine itération.
L'instruction "break" permet de sortir de la boucle.
L'instruction return, permet de terminer la fonction.
return 0 (et pas besoin de parenthèse autour du 0, car ce n'est pas une fonction mais une instruction) dans la fonction main quitte le programme en disant que tout s'est bien déroulé.
Voilà pourquoi il faut le mettre à la fin de ton main().
Cdlt,
Kuku007
Messages postés
183
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
7 septembre 2011
23
28 avril 2010 à 16:39
28 avril 2010 à 16:39
Salut, quelle est l'erreur ?
dalayla
Messages postés
4
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
30 avril 2010
28 avril 2010 à 16:56
28 avril 2010 à 16:56
salut,
normalement à l'execution le programme doit parcourir le fichier toto.xls qui est un tableau[3][2], et doit voir si la variable cod existe, si oui dois retourner sa valeur correspondante sinon doir retourner le mot "erreur", ici mon programme retourne tjrs le mot erreur, , et je ne comprends pas est ce que c'est un problemme de boucle et je sais pas,
on dirai mem que cette partie il ne la traite pas .
if( tab[i][0] == cod)
{
printf(" la long est %d", tab[i][1]);
}
merci
normalement à l'execution le programme doit parcourir le fichier toto.xls qui est un tableau[3][2], et doit voir si la variable cod existe, si oui dois retourner sa valeur correspondante sinon doir retourner le mot "erreur", ici mon programme retourne tjrs le mot erreur, , et je ne comprends pas est ce que c'est un problemme de boucle et je sais pas,
on dirai mem que cette partie il ne la traite pas .
if( tab[i][0] == cod)
{
printf(" la long est %d", tab[i][1]);
}
merci
Kuku007
Messages postés
183
Date d'inscription
dimanche 28 février 2010
Statut
Membre
Dernière intervention
7 septembre 2011
23
28 avril 2010 à 18:34
28 avril 2010 à 18:34
Bah je pense savoir pourquoi ;-)
Essayes d'afficher les caractères récupérés par ton programme.
En fait tu récupères les caractères comme dans un fichier plat type fichier texte mais jles données d'un fichier .xls ne sont pas du tout stockées comme celles d'un fichier plat !
Essayes rien de lire un fichier .xls avec ton bloc notes... ça ne sera pas très concluant.
Il faut savoir comment interpréter les données stockées par un fichier .xls ce qui n'est pas possible puisque solution propriétaire.
Essayes d'afficher les caractères récupérés par ton programme.
En fait tu récupères les caractères comme dans un fichier plat type fichier texte mais jles données d'un fichier .xls ne sont pas du tout stockées comme celles d'un fichier plat !
Essayes rien de lire un fichier .xls avec ton bloc notes... ça ne sera pas très concluant.
Il faut savoir comment interpréter les données stockées par un fichier .xls ce qui n'est pas possible puisque solution propriétaire.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dalayla
Messages postés
4
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
30 avril 2010
30 avril 2010 à 12:15
30 avril 2010 à 12:15
salut, c'est vrai, j'ai changer le xls en txt et en plus j'ai fait un ptit changement la partie de la comparaison de la variable cod je l'ai inclu dans la boucle, et elle a donné le resultat , mais le blèm c'est que quand je teste avec le premier chiffre du tableau il fonctionne bien , mais avec les suivants elle donne tjrs erreur;
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 842
30 avril 2010 à 12:25
30 avril 2010 à 12:25
Bonjour,
L'erreur est située au première ligne.
int i, j, cod;
int tab[i][j];
i et j ne sont pas initialisées, elles valent donc n'importe quoi.
Ce qui fait que la taille de ton tableau n'est pas conforme à tes attentes.
De plus déclarer un tableau avec des variables pour indice n'est pas conforme à l'ISO C89/90. Il vaut mieux passer par un #define.
Par exemple :
Et enfin n'oublie pas le return 0; final ;-))).
Cdlt,
L'erreur est située au première ligne.
int i, j, cod;
int tab[i][j];
i et j ne sont pas initialisées, elles valent donc n'importe quoi.
Ce qui fait que la taille de ton tableau n'est pas conforme à tes attentes.
De plus déclarer un tableau avec des variables pour indice n'est pas conforme à l'ISO C89/90. Il vaut mieux passer par un #define.
Par exemple :
#define NB_LIG 3 #define NB_COL 2 int main(void) { int tab[NB_LIG][NB_COL]; ... }
Et enfin n'oublie pas le return 0; final ;-))).
Cdlt,
dalayla
Messages postés
4
Date d'inscription
mercredi 28 avril 2010
Statut
Membre
Dernière intervention
30 avril 2010
30 avril 2010 à 12:36
30 avril 2010 à 12:36
salut fiddy, merci pour ta reponse,
le programme afonctionné car le i et j sont initialisé dans la boucle for, jai ressu a resoudre le programme , mais une question puisque je suis debutante j'iniore l'utilité et la diffrence entre return(0) break et continue, ta une reponse?
voilà le prog
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main(int)
{
int i,j, cod;
int tab[i][j];
bool b;
FILE *f = NULL;
f = fopen("C:\\toto.txt","r");
if( f == NULL)
{
printf(" le fichier ne peut pas s'ouvrire ");
}
else
{
//Remplir et lire le tableau
for (i=0;i<3;i++)
{
for (j=0;j<2;j++)
{
fscanf(f,"%d", &tab[i][j]);
}
}
//enter l'élément recherhcer
printf("entrer un code : ");
scanf("%d",&cod);
//Tester l'existance d'un élément donné dans le tableau
for (i=0;i<3;i++)
{
if ( tab[i][0] == cod )
{
b = true;
printf(" la long est %d", tab[i][1]);
break;
}
}
if( b != true )
{ printf (" erreur "); }
}
fclose(f);
getch();
}
le programme afonctionné car le i et j sont initialisé dans la boucle for, jai ressu a resoudre le programme , mais une question puisque je suis debutante j'iniore l'utilité et la diffrence entre return(0) break et continue, ta une reponse?
voilà le prog
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main(int)
{
int i,j, cod;
int tab[i][j];
bool b;
FILE *f = NULL;
f = fopen("C:\\toto.txt","r");
if( f == NULL)
{
printf(" le fichier ne peut pas s'ouvrire ");
}
else
{
//Remplir et lire le tableau
for (i=0;i<3;i++)
{
for (j=0;j<2;j++)
{
fscanf(f,"%d", &tab[i][j]);
}
}
//enter l'élément recherhcer
printf("entrer un code : ");
scanf("%d",&cod);
//Tester l'existance d'un élément donné dans le tableau
for (i=0;i<3;i++)
{
if ( tab[i][0] == cod )
{
b = true;
printf(" la long est %d", tab[i][1]);
break;
}
}
if( b != true )
{ printf (" erreur "); }
}
fclose(f);
getch();
}