IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

repeter une question tant que la réponse n'est pas un int


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut repeter une question tant que la réponse n'est pas un int
    bonjour, je suis actuellement en train de programmer un jeu qui se joue sur un plateau d'echec ou il faut bloquer le cavalier pour que l'adversaire ne puisse plus bouger. Le programme fonctionne, seulement lorsque l'on demande au joueur la ligne et la colonne ou il veut mettre le cavalier, s'il répond par une chaine de caractere sa bug. alors je voulais mettre une boucle qui verifie que la réponse est bien un int et un (seul) char. merci pour votre aide. je met le code en dessous.


    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
    //deplacement du cheval
    void deplacement(char tab[8][8], int *a, int *b){
        int l,c;
        char cc;
        do{
            do{
                do{
                  printf("Entre la case ou tu veux deplacer ton cavalier (chiffre suivi d'une majuscule)? \n");
                  scanf("%d%c", &l, &cc);
                  c=cc-65;
     
    //condition du plateau
                }while((l<0) || (l>7) || (c<0) || (c>7));
     
    //condition de possibilté de déplacement de cavalier
            }while (((l!=*a+1)||(c!=*b+2)) && ((l!=*a+1)||(c!=*b-2)) && ((l!=*a-1)||(c!=*b+2)) && ((l!=*a-1)||(c!=*b-2)) && ((c!=*b+1)||(l!=*a+2)) && ((c!=*b+1)||(l!=*a-2)) && ((c!=*b-1)||(l!=*a+2)) && ((c!=*b-1)||(l!=*a-2)));
     
    //condition de case deja passer precedement
        }while(tab[l][c]=='X');
     
            tab[l][c]='C';
            tab[*a][*b]='X';
            *a=l; *b=c;
     
            }

  2. #2
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    Bonjour,
    déjà, pense à utiliser les balises [code] (petit #). Ensuite, scanf, même en C, c'est pas top... alors imagine en C++ oO !

    Un petit conseil, utilise std::cin et va voir du côté des tutoriaux et de la faq.
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  3. #3
    screetch
    Invité(e)
    Par défaut
    le plus simple en fait n'est pas cin, c'est de récupérer une ligne entiere et de verifier :
    - que sa taille est de deux
    - que le premier est un chiffre, entre 1 et 8 (c1 >= '1' && c1 <= '8')
    - que le second est une majuscule entre A et H (c2 >= 'A' && c2 <= 'H')
    si c'est faux, alors demander une autre ligne

    PS: je pensais qu'on disat plutot "C3" pour un echiquier, pas "3C"

    PPS : au lieu d'ecrire en dur 65, ecrit 'A'

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    Je ferais comme screetch a dit et aussi en utilisant std::string:

    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
     
    	std::string s;
    	bool bOk = false, bExit = false;
    	while (!bOk && !bExit)
    	{
    		std::cout << "move: ";
    		std::cin >> s;
     
    		bOk = true;
    		if (s == "X")
    			bExit = true;
    		else
    		{
    			if (s.length() != 2)
    				bOk = false;
    			else
    			{
    				int l = s[0] - '0';
    				int c = s[1] - 'A';
     
    				if ( (l<0) || (l>7)  || (c<0) || (c>7) )
    					bOk = false;
    				else
    					bOk = true; //ici ta conditionne de validité
    			}			
    		}
    	}

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    je vais essayer ca demain, merci pour votre aide rapide et vraiment appréciable.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    et oui en fait on dit C3 et pas 3C, je me suis renseigné. je vais changer ca aussi. merci

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut merci
    merci beaucoup ça marche tres bien et j'ai meme recuperé la forme du code pour d'autres questions tel que le nombre de joueur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Empêcher la tabulation tant que la TextBox n'est pas saisie
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/07/2010, 22h14
  2. Réponses: 2
    Dernier message: 17/06/2009, 23h42
  3. vba tant que cellule active n'est pas ma cellule
    Par elise1983 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/09/2008, 22h34
  4. Réponses: 2
    Dernier message: 01/04/2008, 13h22
  5. Réponses: 2
    Dernier message: 01/11/2006, 22h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo