[C]Des espaces dans les chaines de caractères
Résolu
Yuku
Messages postés
215
Statut
Membre
-
Yuku Messages postés 215 Statut Membre -
Yuku Messages postés 215 Statut Membre -
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 !
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:
- [C]Des espaces dans les chaines de caractères
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Espaces insécables - Guide
- Caractères spéciaux - Guide
- Espace de stockage gmail plein - Guide
- Caractères ascii - Guide
6 réponses
hum...je vois l'erreur tu as oublier de vider le buffer apres tes scanf de choix...
essaye ça
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;
}
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()
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?
Comment je dois initialiser mes variables pour le coup?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question