[C] Lecture d'un string à plusieurs mots
Fermé
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
-
28 déc. 2008 à 02:22
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 - 28 déc. 2008 à 11:30
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 - 28 déc. 2008 à 11:30
A voir également:
- [C] Lecture d'un string à plusieurs mots
- Confirmation de lecture whatsapp - Guide
- Accusé de lecture gmail - Guide
- Mots entre amis sac renversé - Forum jeux en ligne
- Mots entre amis messenger solution ✓ - Forum jeux en ligne
5 réponses
Je ne suis pas du tout un spécialiste du mode console, mais un truc comme ça doit marcher.
Sinon, on peut utiliser getchar en gérant une boucle jusqu'à attendre le caractère de fin; c'est une solution plus sécurisée que scanf qui fait n'importe quoi si on saisi trop de caractères.
#include <stdio.h> using namespace std; int main(int argc, char *argv[]) { char prenom[100], nom[100]; printf("Comment t'appelles-tu ? "); scanf("%s%s", prenom, nom); printf("Bonjour %s %s, soit le bienvenu !\n", prenom, nom); return (0); }
Sinon, on peut utiliser getchar en gérant une boucle jusqu'à attendre le caractère de fin; c'est une solution plus sécurisée que scanf qui fait n'importe quoi si on saisi trop de caractères.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
28 déc. 2008 à 08:11
28 déc. 2008 à 08:11
Salut,
lami20j@debian:~/trash$ cat ccm21_prenom.c #include<stdio.h> int main() { char prenom[100]; char *p=prenom; printf("Comment t'appelles-tu ? "); fgets(prenom,100,stdin); while(*p != '\n' && p++); *p='\0'; printf("Bonjour %s, soit le bienvenue !\n", prenom); return 0; } lami20j@debian:~/trash$ gcc ccm21_prenom.c lami20j@debian:~/trash$ ./a.out Comment t'appelles-tu ? John Smith Bonjour John Smith, soit le bienvenue ! lami20j@debian:~/trash$ ./a.out Comment t'appelles-tu ? Titi Toto Tata Bonjour Titi Toto Tata, soit le bienvenue !
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
28 déc. 2008 à 08:20
28 déc. 2008 à 08:20
Re,
Avec getchar()
Avec getchar()
lami20j@debian:~/trash$ cat ccm21_prenom.c #include<stdio.h> int main() { char prenom[100]; char *p=prenom; int i=0; printf("Comment t'appelles-tu ? "); while(++i<100 && (*p = getchar())!='\n'&& p++); *p='\0'; printf("Bonjour %s, soit le bienvenue !\n", prenom); return 0; } lami20j@debian:~/trash$ gcc ccm21_prenom.c lami20j@debian:~/trash$ ./a.out Comment t'appelles-tu ? John Smith Bonjour John Smith, soit le bienvenue ! lami20j@debian:~/trash$ ./a.out Comment t'appelles-tu ? Titi Toto Tata Bonjour Titi Toto Tata, soit le bienvenue !
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
28 déc. 2008 à 10:39
28 déc. 2008 à 10:39
Un tout grand merci :)
Seulement après avoir regardé cette solution, je trouve que sur cet exemple on n'a pas besoin du pointeur *p non? (je me gourre peut-être totalement).
En tout cas moi j'ai refait ceci de cette manière :
- plus besoin du pointeur *p, autant de servir du i pour indicer notre position dans le tableau vut qu'il est de toute façon là non?
- du coups on n'a plus que deux conditions dans le while au lieu de 3 précédemment (plus besoin d'augmenter l'adresse du pointeur p).
Peut-tu me confirmer et m'expliquer si c'est aussi bon, moins bon, ou mieux?
Seulement après avoir regardé cette solution, je trouve que sur cet exemple on n'a pas besoin du pointeur *p non? (je me gourre peut-être totalement).
En tout cas moi j'ai refait ceci de cette manière :
- plus besoin du pointeur *p, autant de servir du i pour indicer notre position dans le tableau vut qu'il est de toute façon là non?
- du coups on n'a plus que deux conditions dans le while au lieu de 3 précédemment (plus besoin d'augmenter l'adresse du pointeur p).
int main(int argc, char *argv[]) { int i = 0; char prenom[100]; printf("Comment t'appelles-tu ? "); while (i < 100 && (prenom[i++] = getchar()) != '\n'); prenom[i-1] = '\0'; printf("\nBonjour %s, soit le bienvenue.\n", prenom); return 0; }
Peut-tu me confirmer et m'expliquer si c'est aussi bon, moins bon, ou mieux?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
28 déc. 2008 à 11:03
28 déc. 2008 à 11:03
Salut,
Effectivement si tu utilises les indices tu n'as pas besoin de pointeurs ;-)
- du coups on n'a plus que deux conditions dans le while au lieu de 3 précédemment (plus besoin d'augmenter l'adresse du pointeur p).
En fait tu viens de le dire.
L'incrémentation de pointeur n'est pas une condition ;-)
Si les deux conditions sont vérifiées et sont vraies alors j'incrémente le pointeur directement dans while pour avoir un code plus compact ;-)
De toute façon il y a toujours plusieurs possibilités de le faire ;-)
Voici encore une avec pointeurs
Si tu peux écrire (i+1) < 100 alors tu peux écrire i < 99 ;-)))
Effectivement si tu utilises les indices tu n'as pas besoin de pointeurs ;-)
- du coups on n'a plus que deux conditions dans le while au lieu de 3 précédemment (plus besoin d'augmenter l'adresse du pointeur p).
En fait tu viens de le dire.
L'incrémentation de pointeur n'est pas une condition ;-)
Si les deux conditions sont vérifiées et sont vraies alors j'incrémente le pointeur directement dans while pour avoir un code plus compact ;-)
De toute façon il y a toujours plusieurs possibilités de le faire ;-)
Voici encore une avec pointeurs
#include<stdio.h> int main() { char prenom[100]; int i=0; printf("Comment t'appelles-tu ? "); while(i<99 && (*(prenom+i++) = getchar())!='\n'); *(prenom+i-1)='\0'; printf("Bonjour %s, soit le bienvenue !\n", prenom); return 0; }
Si tu peux écrire (i+1) < 100 alors tu peux écrire i < 99 ;-)))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
scriptiz
Messages postés
1424
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 septembre 2023
425
28 déc. 2008 à 11:30
28 déc. 2008 à 11:30
Merci à tous pour votre aide !!! Je commence à bien aimer ce langage =)
Bel exemple mais trop tordu pour moi ton dernier lami20j, je vais maintenant voir parmis les autres lequel je vais utiliser vu qu'il y en a tout plein :-p
PS : Pour le 99 oui j'y avais pensé mais je préférais gardé 100 pour comprendre que ça se rapporte à la taille du tableau ;-)
(comme si c'était une variable en fait bien qu'on m'ai dit de ne pas utiliser de variable pour initialiser la taille de mon tableau :-( )
Bel exemple mais trop tordu pour moi ton dernier lami20j, je vais maintenant voir parmis les autres lequel je vais utiliser vu qu'il y en a tout plein :-p
PS : Pour le 99 oui j'y avais pensé mais je préférais gardé 100 pour comprendre que ça se rapporte à la taille du tableau ;-)
(comme si c'était une variable en fait bien qu'on m'ai dit de ne pas utiliser de variable pour initialiser la taille de mon tableau :-( )