Partage
  • Partager sur Facebook
  • Partager sur Twitter

controle de saisie

    1 juillet 2019 à 20:57:21

    bonjour à tous! excuser moi de grappiller un peu de votre temps mais je suis un débutant en langage c et je dois réaliser un menu et mon problème est au niveau de la sélection du menu. je comptais partir sur la création d'une fonction qui me permettra de vérifier que l'utilisateur a bien saisie un entier et non un caractère ou caractère spéciale. mais je ne sais pas comment m'y prendre. merci d'avance.
    int menu () {
    	int selection = 0; 
    	int compte;
    	
    	boucle:do{
    		system("cls");
    		printf("         Menu Pincipal     \n");
    		printf("1 Applications diverses\n");
    		printf("2 Simulation guichet automatique de banque GAB \n");
    		printf("0 Quitter\n");
    		printf("choix: ");
    		rewind(stdin);	
    		compte = scanf("%d", &selection);
    		}while((selection < 0)|| (selection >2));

    • Partager sur Facebook
    • Partager sur Twitter
      1 juillet 2019 à 23:15:11

      1. Saisir une ligne par getline

      2. puis faire un   int r = sscanf(ligne, "%d", &selection);   pour voir si on peut en extraire un entier (r == 1 si réussi)

      Utilisation de getline : voir https://openclassrooms.com/forum/sujet/probleme-avec-strcmp-1#93273687 vers la fin

      -
      Edité par michelbillaud 1 juillet 2019 à 23:17:00

      • Partager sur Facebook
      • Partager sur Twitter
        1 juillet 2019 à 23:21:17

        Voir aussi  : https://openclassrooms.com/forum/sujet/limiter-la-saisie-de-caractere (dans mon 3e ou 4e message, je suis venue avec un code tout cuit ; un peu plus bas, Fvirtman a donné une suggestion pour améliorer le "while").

        Bonne chance !

        • Partager sur Facebook
        • Partager sur Twitter
          2 juillet 2019 à 12:05:38

          sinon tu peux utiliser ce que d'autre on fait regarde sur github par exemple ici
          • Partager sur Facebook
          • Partager sur Twitter

          la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

          Mon GitHub

            3 juillet 2019 à 23:26:14

            merci les gars mais Grenade90 pourquoi vous avez crée une fonction viderBuffer() au lieu d'utiliser fflush(stdin) ou rewind(stdin)
            • Partager sur Facebook
            • Partager sur Twitter
              4 juillet 2019 à 7:40:22

              car on ne peut pas fflush stdin :

              > If the given stream was open for writing (or if it was open for updating and the last i/o operation was an output operation) any unwritten data in its output buffer is written to the file.

              > If stream is a null pointer, all such streams are flushed.

              > In all other cases, the behavior depends on the specific library implementation. In some implementations, flushing a stream open for reading causes its input buffer to be cleared (but this is not portable expected behavior).

              En gros si fd est une sortie alors on ecrit tout, si fd est un une entrée on sait pas ça depend de la lib, donc on ne fais pas fflush( stdin );

              pour rewind(), c'est pas addapté au besoin :

              > The C library function void rewind(FILE *stream) sets the file position to the beginning of the file of the given stream.

              PS : même si certain profs enseignent qu'on peut fflush stdin, c'est pas à faire, car non spécifié donc à minima non portable.

              -
              Edité par ox223252 4 juillet 2019 à 7:47:46

              • Partager sur Facebook
              • Partager sur Twitter

              la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

              Mon GitHub

              controle de saisie

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown