bonsoir,
tout est dans le titre
merci pour votre aide.
bonsoir,
tout est dans le titre
merci pour votre aide.
Le passage d'un tableau de structures se fait de la même façon que tout autre tableau. Rien de spécial.
Bonjour,
j'ai esseyé tous les cas possibles mais cela ne marche pas.
mon programme compile sans erreurs mais l'exécution est fausse
il n'affiche pas le prenom "mackla", pourtant il existe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 #include <stdio.h> #include <stdlib.h> #include <string.h> #define LONG 30 typedef struct{ char nom[LONG+1]; char prenom[LONG+1]; char ville[LONG+1]; }personne; personne per[5]; main() { void red(personne per, int n); FILE *ptr; int i; ptr=fopen("fichier.txt", "a+"); if (ptr==NULL) { printf("erreur lors de création du fichier\n"); } else { while(!feof(ptr)) { for (i=0; i<=5; i++); { fscanf(ptr, "%s %s %s", per[i].nom, per[i].prenom, per[i].ville); fprintf(stdout, "%s\n%s\n%s\n\n", per[i].nom, per[i].prenom, per[i].ville); } } } red(per, 5); } } void red(personne perl[], int n) { char *chaine="mackla"; for(i=0; i<=n; i++) { if (strcmp(chaine, per[i].prenom) == 0) { strcpy(chaine, per[i].nom); fprintf(stdout, "%s\n", chaine); } fprintf("elle nexiste pas\n"); }
merci pour votre aide
Ah ! Etrange, car en compilant le code que tu as fourni la compilation ne se passe pas bien :
Il faut corriger ces problèmes avant d'essayer d'aller plus loin.-------------- Build: Release in test_DVP ---------------
Compiling: main.c
E:\projet\test_DVP\main.c:16: warning: return type defaults to `int'
E:\projet\test_DVP\main.c: In function `main':
E:\projet\test_DVP\main.c:41: error: incompatible type for argument 1 of `red'
E:\projet\test_DVP\main.c: At top level:
E:\projet\test_DVP\main.c:43: error: syntax error before '}' token
E:\projet\test_DVP\main.c:46: error: conflicting types for 'red'
E:\projet\test_DVP\main.c:18: error: previous declaration of 'red' was here
E:\projet\test_DVP\main.c: In function `red':
E:\projet\test_DVP\main.c:50: error: `i' undeclared (first use in this function)
E:\projet\test_DVP\main.c:50: error: (Each undeclared identifier is reported only once
E:\projet\test_DVP\main.c:50: error: for each function it appears in.)
E:\projet\test_DVP\main.c:57: warning: passing arg 1 of `fprintf' from incompatible pointer type
E:\projet\test_DVP\main.c:57: error: too few arguments to function `fprintf'
E:\projet\test_DVP\main.c:58: error: syntax error at end of input
Process terminated with status 1 (0 minutes, 0 seconds)
9 errors, 2 warnings
Le codage, c'est pas du hasard... Il faut faire ce qui est correct et ça découle d'une réflexion préalable...
Euh, non...mon programme compile sans erreurs
Il faut faire un copié/collé et non recopier le code à la main...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Project : Forums Compiler : GNU GCC Compiler (called directly) Directory : D:\dev\forums\ -------------------------------------------------------------------------------- Switching to target: default Compiling: main.c main.c:16: warning: return type defaults to `int' main.c:16: warning: function declaration isn't a prototype main.c: In function `main': main.c:41: error: incompatible type for argument 1 of `red' main.c: At top level: main.c:43: error: syntax error before '}' token main.c:46: error: conflicting types for 'red' main.c:18: error: previous declaration of 'red' was here main.c: In function `red': main.c:48: warning: initialization discards qualifiers from pointer target type main.c:50: error: `i' undeclared (first use in this function) main.c:50: error: (Each undeclared identifier is reported only once main.c:50: error: for each function it appears in.) main.c:57: warning: passing arg 1 of `fprintf' from incompatible pointer type main.c:57: error: too few arguments to function `fprintf' main.c:58: error: syntax error at end of input Process terminated with status 1 (0 minutes, 2 seconds) 9 errors, 4 warnings
Beaucoup d'erreurs basiques.
- Pourquoi utiliser "a+" pour lire un fichier ?
- feof() ne fait pas ce que tu crois. Il faut tester la valeur retournée par fscanf()
- Il ne faut pas de ';' après un for (ici, le fichier n'est jamais lu, mais de toutes façon la méthode de lecture est fausse...)
- Il faut fermer le fichier après usage.
- Certains identificateurs sont incompréhensibles...
- fprintf (stdout, ...); est une façon compliquée d'écrire printf (...);
Code : Sélectionner tout - Visualiser dans une fenêtre à part for (i = 0; i <= n; i++)- Les indices valides d'un tableau de N éléments vont de 0 à N-1
Voici une version corrigée.
Je n'ai pas de fichier pour tester, alors ça donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 #include <stdio.h> #include <string.h> #define LONG 30 typedef struct { char nom[LONG + 1]; char prenom[LONG + 1]; char ville[LONG + 1]; } personne; void rechercher (personne per[], int n, char const *chaine) { int i; int trouve = 0; /* Parcours du tableau. */ for (i = 0; !trouve && i < n; i++) { /* Si on a trouvé , on arrete. */ if (strcmp (chaine, per[i].prenom) == 0) { printf ("%s\n%s\n%s\n\n", per[i].nom, per[i].prenom, per[i].ville); trouve = 1; } } /* si on a pas trouve */ if (!trouve) { printf ("'%s' est introuvable\n", chaine); } } int main (void) { char const *fname = "fichier.txt"; FILE *fp = fopen (fname, "r"); if (fp != NULL) { int i = 0; personne per[5] = { {"", "", ""} }; /* chargement du tableau */ while (i < 5 && fscanf (fp, "%s %s %s", per[i].nom, per[i].prenom, per[i].ville) == 3) { printf ("%s\n%s\n%s\n\n", per[i].nom, per[i].prenom, per[i].ville); i++; } fclose (fp), fp = NULL; rechercher (per, 5, "mackla"); } else { perror (fname); } return 0; }
Tu peux poster une copie de ton "fichier.txt" ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 fichier.txt: No such file or directory Press ENTER to continue.
j'ajoute à chaque fois sur mon fichier (donc lecture/ecriture)Envoyé par Emmanuel Delahaye
Beaucoup d'erreurs basiques.
Pourquoi utiliser "a+" pour lire un fichier ?
une erreur de frappe (vous avez raison pour le copier/coller)Il ne faut pas de ';' après un for (ici, le fichier n'est jamais lu, mais de toutes façon la méthode de lecture est fausse...).
Il faut fermer le fichier après usage
concernant le fichier.txt il est structuré comme suit
j'ai compiler votre code, il est sans erreur ; mais l'exécution est faussemackla toto paris
joseph titi bordeaux
franck tata evry
la voici:
pourtant mackla existe.mackla
toto
paris
joseph
titi
bordeaux
franck
tata
evry
'mackla' est introuvable
Pas de :roll: STP. C'est extrêment mal poli...
Normal. 'mackla' est un nom et tu cherches dans les prénoms...
Ceci fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 #include <stdio.h> #include <string.h> #define LONG 30 typedef struct { char nom[LONG + 1]; char prenom[LONG + 1]; char ville[LONG + 1]; } personne; void rechercher (personne per[], int n, char const *chaine) { int i; int trouve = 0; /* Parcours du tableau. */ for (i = 0; !trouve && i < n; i++) { /* Si on a trouvé , on arrete. */ if (strcmp (chaine, per[i].nom) == 0) { printf ("%s\n%s\n%s\n\n", per[i].nom, per[i].prenom, per[i].ville); trouve = 1; } } /* si on a pas trouve */ if (!trouve) { printf ("'%s' est introuvable\n", chaine); } } int main (void) { char const *fname = "fichier.txt"; FILE *fp = fopen (fname, "r"); if (fp != NULL) { int i = 0; personne per[5] = { {"", "", ""} }; /* chargement du tableau */ while (i < 5 && fscanf (fp, "%s %s %s", per[i].nom, per[i].prenom, per[i].ville) == 3) { printf ("'%s', '%s', '%s'\n", per[i].nom, per[i].prenom, per[i].ville); i++; } fclose (fp), fp = NULL; rechercher (per, 5, "mackla"); } else { perror (fname); } return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 'mackla', 'toto', 'paris' 'joseph', 'titi', 'bordeaux' 'franck', 'tata', 'evry' mackla toto paris Press ENTER to continue.
désolé, mais je ne voulai en aucun cas insinuer quoi que ce soit, juste étonner de l'exécution.Pas de STP. C'est extrêment mal poli...
on cerche dans les noms.if (strcmp (chaine, per[i].nom) == 0)
dans la structure de mon fichier:
les nom sont : mackla, joseph et franck.
les prenom : toto, titi et tata
Fao,
Oui, mais dans le code, il y avait bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 void rechercher (personne per[], int n, char const *chaine) { int i; int trouve = 0; /* Parcours du tableau. */ for (i = 0; !trouve && i < n; i++) { /* Si on a trouvé , on arrete. */ // ici, c'est bien dans les prénoms qu'on cherche. :) if (strcmp (chaine, per[i].prenom) == 0) { printf ("%s\n%s\n%s\n\n", per[i].nom, per[i].prenom, per[i].ville); trouve = 1; } } /* si on a pas trouve */ if (!trouve) { printf ("'%s' est introuvable\n", chaine); } }
merci à vous Emmanuel Delahaye pour votre aide
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager