mon problème est résolut
mon problème est résolut
Bonjour,
Bon courage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 char a : représente une seule variable char a[10] : représente un tableau de 10 caractères a[0] : premier caractère et a[9] est le dernier.
Vos
destinés à récupérer les retours chariots qui traînent après la lecture d'un entier ne sont pas au bon endroit, il faut les placer après les
Code : Sélectionner tout - Visualiser dans une fenêtre à part scanf ("%c", &poubelle);
Ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part scanf ("%d",...);
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 ... printf ("Entrez le nom de l'organisme : "); scanf ("%c", &a); printf ("Entrez sa taille (en Kbp) : "); scanf ("%d", &i); scanf ("%c", &poubelle); printf ("Entrez le nom de l'organisme : "); scanf ("%c", &b); printf ("Entrez sa taille (en Kbp) : "); scanf ("%d", &j); scanf ("%c", &poubelle); printf ("Entrez le nom de l'organisme : "); scanf ("%c", &c); printf ("Entrez sa taille (en Kbp) : "); scanf ("%d", &k); ...
Mauvaise utilisation de scanf.
Le sujet est maintes et maintes fois traité dans ce forum.
Tu trouveras des explications dans les topics suivants.
http://www.developpez.net/forums/sho...ighlight=scanf
http://www.developpez.net/forums/sho...ighlight=scanf
Si tu veux entrer des noms, effectivement, un char ne sera pas suffisant à moins que le nom des organismes ne comporte qu'une seule lettre.
Ensuite, si le nom peut contenir plus d'une lettre, il faut utiliser des tableaux de char et une fonction du type fgets() ou scanf().
quand j'utilise fgets j'ai ce message
passing argument 2 of "fgets" makes integer from pointer without a cast
J'ai vu que d'autre ont eu ce problème , mais je ne sais pas comment résoudre ça ... il me faudrait une explication détaillée , je pense
merci
Exemple:Envoyé par K&R2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char s[10]; ... fgets(s,sizeof s,stdin); ...
je connait bien fgets
mais je n'ai encore jamais réussis à l'utiliser
j'ai toujours
passing argument 2 of "fgets" makes integer from pointer without a cast
Postez votre code s'il vous plaît.
Bonjour,
fait nous voir comment tu essaye de l'appeler on aura peut etre la reponse
"vaste programme"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 . . .
ben voilà où j'en suis pour le moment
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
66
67
68
69
70
71
72
73
74
75 #include <stdio.h> #include <stdlib.h> int main (void) { char poubelle; char a[10]; char b[10]; char c[10]; int i; int j; int k; i = 0; j = 0; k = 0; printf ("Entrez le nom de l'organisme : "); fgets (&a[0], 9, stdin); printf ("Entrez sa taille (en Kbp) : "); scanf ("%d", &i); scanf ("%s", &poubelle); printf ("Entrez le nom de l'organisme : "); fgets (&a[0], 9, stdin); printf ("Entrez sa taille (en Kbp) : "); scanf ("%d", &j); scanf ("%s", &poubelle); printf ("Entrez le nom de l'organisme : "); fgets (&a[0], 9, stdin); printf ("Entrez sa taille (en Kbp) : "); scanf ("%d", &k); scanf ("%s", &poubelle); if (i<j && j<k) { printf ("\nGenome max : %c\n", c[0]); printf ("Genome min : %c\n", a[0]); printf ("Genome med : %c\n", b[0]); } else if (i<j && k<j) { printf ("\nGenome max : %c\n", b[10]); printf ("Genome min : %c\n", a[10]); printf ("Genome med : %c\n", c[10]); } else if (j<k && k<i) { printf ("\nGenome max : %c\n", a[10]); printf ("Genome min : %c\n", b[10]); printf ("Genome med : %c\n", c[10]); } else if (j<k && i<k) { printf ("\nGenome max : %c\n", c[10]); printf ("Genome min : %c\n", b[10]); printf ("Genome med : %c\n", a[10]); } else if (k<j && j<i) { printf ("\nGenome max : %c\n", a[10]); printf ("Genome min : %c\n", c[10]); printf ("Genome med : %c\n", b[10]); } else if (k<j && i<j) { printf ("\nGenome max : %c\n", b[10]); printf ("Genome min : %c\n", c[10]); printf ("Genome med : %c\n", a[10]); } return 0; }
comme codé sur les thread referencés par les liens cité plus haut
(code de tierry chappuis, pris sur un des thread susmentionné)
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 /* utilisation de fgets */ char buffer[15] = ""; if (fgets(buffer, sizeof buffer, stdin) != NULL) { fclean(buffer, stdin); n = strtol(buffer, &p_end, 0); } /* Elimine le caractere de fin de ligne terminant la saisie et vide le tampon du flux d'entree stream si necessaire */ static void fclean(char *buffer, FILE *stream) { char *pc = strchr(buffer, '\n'); if (pc != NULL) { /* Le caractere de fin de ligne a ete trouve. La saisie est complete */ *pc = 0; } else { /* La saisie a ete tronquee. On vide le tampon du flux stream */ /* Important: la fonction fgetc(stream) retourne un entier de type int, pas de type char. */ int c; while ((c = fgetc(stream)) != '\n' && c != EOF) { /* On ignore les caractere presents dans le tampon */ } } }
pour le reste visite les thread, tout est dis dedans.
"vaste programme"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 . . .
Voici ton programme (un peu) remanié...
Thierry
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 #include <stdio.h> #include <stdlib.h> #include <string.h> /* -tc- determine le nombre d'elements que contient un tableau statique */ #define NB_ELEMS(a) ( sizeof (a) / sizeof *(a) ) /* -tc- Une structure Organisme pour faire les choses proprement */ struct Organisme { char nom[10]; int taille; }; /* -tc- fonction essentielle pour bien utiliser fgets() */ static void fclean(char *buffer, FILE *stream); /* -tc- predicat a utiliser avec qsort() */ static int comparer(void const *o1, void const *o2); int main (void) { /* -tc- tampon utilise lors de la saisie d'un entier */ char tampon[15] = ""; struct Organisme organismes[3] = {{"", 0}}; size_t i; for (i = 0; i < NB_ELEMS(organismes); ++i) { char *pend = NULL; printf ("Entrez le nom de l'organisme : "); /* -tc- necessaire pour forcer l'affichage de l'invite */ fflush(stdout); fgets(organismes[i].nom, sizeof organismes[i].nom, stdin); fclean(organismes[i].nom, stdin); /* -tc- Saisie securisee d'un entier */ do { printf ("Entrez sa taille (en Kbp) : "); fflush(stdout); fgets(tampon, sizeof tampon, stdin); fclean(tampon, stdin); organismes[i].taille = strtol(tampon, &pend, 0); } while (*pend != 0); } /* -tc- On trie le tableau organismes */ qsort(organismes, NB_ELEMS(organismes), sizeof *organismes, comparer); /*-tc- Le tableau etant trie, il est facile de determiner max, min, et med */ printf("Genome max: %s\n", organismes[NB_ELEMS(organismes) - 1].nom); printf("Genome min: %s\n", organismes[0].nom); printf("Genome med: %s\n", organismes[NB_ELEMS(organismes) / 2].nom); return EXIT_SUCCESS; } /* -tc- Predicat permettant de comparer deux organismes */ static int comparer(void const *o1, void const *o2) { struct Organisme const *org1 = (struct Organisme const *) o1; struct Organisme const *org2 = (struct Organisme const *) o2; return org1->taille - org2->taille; } /* -tc- Elimine le caractere de fin de ligne terminant la saisie et vide le tampon du flux d'entree stream si necessaire */ static void fclean(char *buffer, FILE *stream) { char *pc = strchr(buffer, '\n'); if (pc != NULL) { /* -tc- Le caractere de fin de ligne a ete trouve. La saisie est complete */ *pc = 0; } else { /* -tc- La saisie a ete tronquee. On vide le tampon du flux stream */ /* -tc- Important: la fonction fgetc(stream) retourne un entier de type int, pas de type char. */ int c; while ((c = fgetc(stream)) != '\n' && c != EOF) { /* -tc- On ignore les caractere presents dans le tampon */ } } }
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
un peu (beaucoup) remanié tout de même
je vais faire de mon mieu pour tout comprendre
Pas tant remanié que ça, à part l'introduction d'une structure Organisme pour encapsuler le nom et la taille dans une seule entité. Sinon, les répétitions de code on été remplacées par des boucles (si tu n'as que 3 organismes, ce n'est pas un problème de tout taper à la main, mais si le nombre d'organismes augmente... Les boucles et les tableaux sont faits pour ça!).
Le tri d'un tableau est une excellente manière d'obtenir le max, min et med d'un ensemble de valeurs. La fonction qsort() (déclarée dans le fichier d'en-tête standard stdlib.h) rend cette tâche beaucoup moins fastidieuse que la technique "a la mano" que tu as utilisée.
Pour le reste, je n'utilise jamais scanf() (ou presque jamais). C'est une fonction plus complexe que ne le laissent penser beaucoup de prof. ou livres d'introduction. Pour en maîtriser toutes les finesses, je recommande la lecture suivante qui est très instructive: http://xrenault.developpez.com/tutoriels/c/scanf/. Toutefois, lorsque tu auras pris l'habitude du travail en équipe, tu te rendras vite compte que si tu as su prendre le temps de devenir un gourou dans l'utilisation de scanf(), il y a 9 chances sur 10 que les programmeurs qui seront chargés de la maintenance n'afficherons, pour leur part, pas une telle maîtrise. EN conclusion, utilise fgets() et fclean() (voir détails dans les archives du forum) autant que possible et, si besoin, convertir le texte saisi avec strtol(), strtoul(), strtod() ou même sscanf().
N'hésite pas à poser des questions si tu ne comprends pas.
Thierry
"The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
"If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow
FAQ-Python FAQ-C FAQ-C++
+
Je pense en comprendre une grande partie .
Pour l'instant je me demande si le tampon utilisé lors de la saisie d'un entier doit nécéssairement être plus grand que le nombre entre crochets , au début dans "char nom[10]" ?
(il me semble que ça vaut mieu)
J'aurais sûrement encore besoin d'aide , j'ai bien du chemin à faire...
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