[C]Des espaces dans les chaines de caractères

Résolu
Yuku Messages postés 199 Date d'inscription   Statut Membre Dernière intervention   -  
Yuku Messages postés 199 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous.

Je suis débutant en programmation et je me posais une question vis à vis d'un petit code que j'ai mis au point, tout simple, qui comme dans le début du jeu Pokémon demande à l'utilisateur son nom, celui de son adversaire, et où il habite.
Le hic est que le programme fonctionne correctement, sauf lorsque l'on rentre un nom composé sans tiret.
Par exemple, il y aura un problème si l'on rentre Jean Charles : seul Jean sera retenu par le programme.
Voici le code source :

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
char util[10], adversaire[10], OHV[35]; //Initialisation des chaines de caractères.
char choix; //Initialisation de la variable choix (%c car O[oui] ou N[non]).

do{
printf("\nComment vous appelez-vous?\t");
scanf("%s", util); //L'utilisateur informe de son nom.
fflush(stdin); //Nettoyage du buffer pour éviter des problèmes avec scanf.
printf("\nVous vous appelez donc %s ? (O=Oui, N=Non)\t", util);
scanf("%c", &choix);
if(choix=='O' && choix!='N')
{
printf("\nD'accord, votre nom est donc ");
}
}while(choix=='N'); //Boucle qui se répète tant que le choix n'est pas correct.
printf("%s !\n\n", util);

do{
printf("\nLe nom de votre rival?\t\t");
scanf("%s", adversaire);
fflush(stdin);
printf("\nVotre rival est donc %s ? (O=Oui, N=Non)\t", adversaire);
scanf("%c", &choix);
if(choix=='O' && choix!='N')
{
printf("\nAh mais oui, c'est ");
}
}while(choix=='N');
printf("%s votre rival!\n\n", adversaire);

do{
printf("\nEt ou habitez-vous?\t\t");
scanf("%s", OHV);
fflush(stdin);
printf("\nVous habitez donc a %s ? (O=Oui, N=Non) ?\t", OHV);
scanf("%c", &choix);
if(choix=='O' && choix!='N')
{
printf("\nVous etes donc ");
}
}while(choix=='N');
printf("%s, de %s !\n\n\n", util, OHV);

system("PAUSE");
return 0;
}


Question subsidiaire : comment faire en sorte d'avoir juste un petit tiret clignotant à la suite du texte (et donc attente que l'utilisateur appuie sur Entrée pour continuer), plutôt que d'afficher à chaque fois "Appuyez sur une touche pour continuer"?
(je travaille sous Dev-C++).

Merci d'avance !
A voir également:

6 réponses

mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
hum...je vois l'erreur tu as oublier de vider le buffer apres tes scanf de choix...
essaye ça
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

//using namespace std;

int main(int argc, char *argv[])
{
char util[10], adversaire[10], OHV[35]; //Initialisation des chaines de caractères.
char choix; //Initialisation de la variable choix (%c car O[oui] ou N[non]).

do{
printf("\nComment vous appelez-vous?\t");
fgets(util,10,stdin); //L'utilisateur informe de son nom.
fflush(stdin); //Nettoyage du buffer pour éviter des problèmes avec scanf.
printf("\nVous vous appelez donc %s ? (O=Oui, N=Non)\t", util);
scanf("%c", &choix);
fflush(stdin);
if(choix=='O' && choix!='N')
{
printf("\nD'accord, votre nom est donc ");
}
}while(choix=='N'); //Boucle qui se répète tant que le choix n'est pas correct.
printf("%s !\n\n", util);

do{
printf("\nLe nom de votre rival?\t\t");
fgets(adversaire,10,stdin);
fflush(stdin);
printf("\nVotre rival est donc %s ? (O=Oui, N=Non)\t", adversaire);
scanf("%c", &choix);
fflush(stdin);
if(choix=='O' && choix!='N')
{
printf("\nAh mais oui, c'est ");
}
}while(choix=='N');
printf("%s votre rival!\n\n", adversaire);

do{
printf("\nEt ou habitez-vous?\t\t");
scanf("%s", OHV);
fflush(stdin);
printf("\nVous habitez donc a %s ? (O=Oui, N=Non) ?\t", OHV);
scanf("%c", &choix);
if(choix=='O' && choix!='N')
{
printf("\nVous etes donc ");
}
}while(choix=='N');
printf("%s, de %s !\n\n\n", util, OHV);

system("PAUSE");
return 0;
}
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
le scanf arrete de stocké des qu'il rencontre un espace la solution c'est d'utiliser fgets qui lui stocke les espace
fgets(util,10,stdin);
pour l'autre question au lieu d'utiliser system("PAUSE") tu peux utiliser getchar()
-1
Yuku Messages postés 199 Date d'inscription   Statut Membre Dernière intervention   4
 
Le fgets, c'est donc :

fgets(variable, taille, lieu de destination) ?
-1
Yuku Messages postés 199 Date d'inscription   Statut Membre Dernière intervention   4
 
Euh oui mais si je mets donc fgets(util, 10, stdin); à la place de scanf("%s", util);, le programme ne s'exécute pas correctement du tout...

Comment je dois initialiser mes variables pour le coup?
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
pour savoir la construction de fgets ICI
comment sa ton prog ne s'execute pas il y a juste a remplacer les scanf ou tu stocke les nom par le fgets...
-1
Yuku Messages postés 199 Date d'inscription   Statut Membre Dernière intervention   4
 
J'ai réussi entretemps, j'ai juste mis des fflush entre chaque do{, tout se passe très bien ! ^^

D'autre part j'ai utilisé le strchr pour éviter de prendre en compte le retour à la ligne dans ma chaîne ;)

Merci bien !
-1