Bonjour,
j'essaye de faire l'exercice 1. Je suis bloqué car je ne vois pas comment faire...
je n'arrive pas à le programmer...
Pouvez-vous m'aider ?
Pièce jointe 588748
Merci d'avance.
Version imprimable
Bonjour,
j'essaye de faire l'exercice 1. Je suis bloqué car je ne vois pas comment faire...
je n'arrive pas à le programmer...
Pouvez-vous m'aider ?
Pièce jointe 588748
Merci d'avance.
Bonjour.
Oui on peut t’aider 😁.
De rien.
P.s. : ici pour avoir vraiment de l’aide il faut poster son code source et expliquer les problèmes rencontrés 😉.
Le problème c'est que je ne vois pas par quoi commencé...
Une première ligne qui demande un texte a l’utilisateur.
Une boucle qui extrait de ce texte tous les "mots" séparés par un espace. Un compteur initialisé à 1 sera affiché ainsi que le mot trouvé. A chaque mot trouvé on incrémente le compteur et on passe au suivant.
En partant de là je suppose quand-même que tu as eu un minimum de cours en C.
Oui je suis en licence.
Merci, je ne voyais pas comment réaliser le programme. j'ai eu la même idée que vous mais c'est dans l'écriture que je suis bloqué...
j'ai commencé par :
je ne sais pas comment faire pour le compteur...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include <stdio.h> #include <stdlib.h> int main (void) { char chaine [100]; printf ("Entrez_100_caracteres_:_\n); While scnaf ("%c", chaine [k]); } chaine [8] = "\0"; printf ("La_chaine_est_:_%s\n", chaine); return EXIT_SUCCESS; }
Houla, ton code n'en ai pas un !
Pour commencer encadre ton code avec les balises [code] :tagcode: (le # dans les icônes).
La fonction printf (); affiche un texte, c'est tout. Ton exercice te demande d'utiliser la fonction scanf (); -> documentation en français. Tu trouveras dans cette page toutes les réponses à tes questions quant à la gestion des entrées/sorties en console.
La boucle while (), si elle répète plusieurs instructions, doit encadrer ces dernières par des {}.. De plus elle attend une condition pour pouvoir sortir -> faq instruction while ();
Histoire que tu vois comment on écrit un code lisible et structuré voila une base de départ :
Quelques explications.Code:
1
2
3
4
5
6
7
8
9
10 int main(int argc, char* argv[]) { char chaine [101]; printf ("Entrez 100 caracteres : "); scanf ("%100s", chaine); printf ("La chaine est : %s\n", chaine); return EXIT_SUCCESS; }
La chaîne doit contenir 101 caractères. scanf ("%100s", chaine); va autoriser 100 caractères + un caractère de fin \0. D'où 101.
Pourquoi j'utilise %s ? C'est demandé dans l'exercice ;). Le nombre 100 interdit le dépassement de tampon mémoire (longueur de la chaîne).
À ton clavier maintenant :)...
D'accord, merci beaucoup j'y vois déjà plus clair !!
Du coup maintenant pour introduire la fonction While, je l'écris après return EXIT_SUCCESS; ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 return EXIT_SUCCESS; } char chaine [] = "%100s" int i; int compteur = 0; while (i=0, chaine [i] !='\0';i++) { or (i = "0+1", chaine [i] !=' ') { printf ("%s", chaine [i]); } else printf ("\n"); }
Sais-tu ce que fait l'instruction return EXIT_SUCCESS; ?
Ha mince je me suis trompé... cette instruction nous remène a notre page de code.
ma boucle est bonne ou pas ?
Code:
1
2
3
4
5
6
7
8
9
10
11 char chaine [] = "%100s" int i; int compteur = 0; while (i=0, chaine [i] !='\0';i++) { or (i = "0+1", chaine [i] !=' ') { printf ("%s", chaine [i]); } else printf ("\n");
Compiles-tu ton code avant de nous le donner ?
L’instruction or n’existe pas !
Ce n'est pas un devoir à rendre, c'est juste un exercice mais je n'y arrive pas... je ne comprends pas...
Pourriez-vous le faire et ensuite m'expliquer svp ?
Si vous avez un peu de temps :)
Bonjour,
Ce n'est pas un devoir ?
Je veux bien te croire.
MAIS si c'est un exercice que tu as choisi de faire, c'est que tu veux courir avant de savoir marcher :
manifestement, tu ne connais pas les bases du langage, et c'est bien évidemment par là qu'il faut commencer.
:)
C'est un exercice donné par le prof à faire pour demain !
Mais je n'y arrive pas...
Bonjour
Ouais bien sûr. Déjà on t'a dit de mettre ton code entre balises "code" mais malgré ça, tu as posté deux codes sans tenir compte de cette remarque ce qui a bien entamé notre dose de patience à ton égard. C'est plus un poil que tu as dans la main, c'est carrément de la moquette. T'as même pas été foutu de donner à ton post un titre qui résume ta problématique (ou alors ta problématique c'est clairement de pouvoir écrire un programme en C quel qu'il soit quoi).
Accessoirement ces codes sont tous deux plus horrible l'un que l'autre ce qu'on aurait pu croire impossible (si A est plus horrible que B alors B ne peut pas être plus horrible que A) mais que manifestement tu as réussi à faire. Comme quoi ...
Alors pour ta boucle
- il semble que tu confondes "while" et "for"
- il semble que tu confondes la virgule et le point-virgule
- l'instruction "or" n'existe pas
- i (un int) ne peut pas être égal à "0+1" (une string). En fait aussi bizarre que cela parraisse, cela peut arriver mais le résultat sera anarchique (une string étant un pointeur, une adresse, ça reste en effet un nombre)
- "=" c'est une affectation, pas une comparaison (mais peut-être voulais-tu réellement affecter l'adresse de "0+1" à l'entier "i"...)
- chaine étant une string, chaine[i] est un caractère donc le format de "printf" ne doit pas être "%s"
Et accessoirement, en plus de l'inutilité de la variable "compteur" non utilisée et de la parité des accolades ouvrantes/fermantes non respectée (on n'en n'est plus là n'est-ce pas ?) personne ne comprend pourquoi tu stockes la string "%100s" dans le tableau de char "chaine" mais là, l'instruction est correcte.
Ah ben les livres de C ne servent pas que de table basse pour mettre une bière dessus (oui je sais, aujourd'hui les livres de C on les télécharge mais je voyais mal comment faire un vanne à partir d'un tuto téléchargé , ou alors style "les tutos de C qu'on télécharge ne servent pas qu'à remplir le dossier bittorrent pour faire augmenter notre ratio tracker" mais bof).
Non. Sans parler du fait que ce serait injuste vis à vis des autres élèves qui, eux, travaillent honnêtement, ton prof te donnera le corrigé et te l'expliquera mieux que nous ne saurions le faire. Et accessoirement il aura un vrai aperçu de ton niveau en C plutôt que lui donner un aperçu du notre (ce dont il n'a bien entendu que faire) si tu lui donnais notre code sous ta signature.
Bon, histoire de clore le sujet et même si j'ai bien conscience que ce n'est pas t'aider de le faire, voila un code exemple qui ne colle pas parfaitement à l'énoncé.
Code:
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 #include<stdlib.h> #include<stdio.h> int main(int argc, char* argv[]) { char chaine [101]; chaine [100] = '\0'; printf ("Entrez 100 caracteres : "); scanf ("%100c", chaine); printf ("La chaine est : %s\n", chaine); int compteur = 1; // Le compteur qui sera affiché devant chaque mot int index = 0; // la position du pcaractère actuellement pointé int position = 0; // Sauvegarde de la position du 1er caractère du prochain mot int i; // variable qui permet de remplir la chaîne mot [] avec le bon nbre de caractères char mot [100]; // mot actuellement affiché en face du compteur while (chaine [index] !='\0') { // Tant qu'on n'est pas arrivé à la fin du texte // Boucle d'extraction du prochain mot while (chaine [index]!= ' ' && index < 100) index++; // Vérification si on est pas à la fin du texte. Il n'y a pas de nouveau mot // à afficher. On sort du while (); principal. if (index-position==0) break; // À partir d'ici index pointe sur le dernier caractère du mot extrait. // La boucle suivante recopie les caractères à partir de la position "position" // jusqu'à "index". for (i=0; position < index; position++, i++) mot [i] = chaine [position]; // "mot" contient le mot à afficher. Ajout du terminateur '\0' pour rendre // cette chaîne conforme et utilisable avec printf (); mot [i++] = '\0'; // Affichage du compteur et du mot printf ("%d\t%s\n", compteur, mot); // Positionnement de l'index sur le caractère suivant. position est aussi // initialisé à la valeur d'index. (position de départ du nouveau mot) index++; position = index; // Le compteur est incrémenté compteur++; } return EXIT_SUCCESS; }
Citation:
~/Projects/test/src$ ./test
Entrez 100 caracteres : The book assumes some familiarity with basic programming concepts like variables, assignments statements, loops, and functions.
La chaine est : The book assumes some familiarity with basic programming concepts like variables, assignments statem
1 The
2 book
3 assumes
4 some
5 familiarity
6 with
7 basic
8 programming
9 concepts
10 like
11 variables,
12 assignments
13 statem