Partage
  • Partager sur Facebook
  • Partager sur Twitter

Echappement d'un scanf.

    28 février 2007 à 23:06:01

    Bonsoir !

    Je suis en train de m'interesser aux séquences d'échappement d'un scanf, et l'une d'elle a particulièrement retenu mon attention : les crochets [].

    J'ai compris qu'en faisant un :
    scanf("%[abc]", chaine);

    le scanf prendrai toutes les données que l'on tape et les enverrai dans "chaine" sous forme d'une chaine de caractères, du moment qu'elles sont composées des lettres a, b ou c, et qu'au premier caractère différent, le scanf s'arrete.
    Par exemple, taper "abcacccbaaqrst" renverrai "abcacccbaa".

    J'ai aussi vu que faire :
    scanf("%[^abc]", chaine);

    est le contraire de la syntaxe précédente : dès que le scanf rencontre une lettre parmi a,b et c, il s'arrete.
    Par exemple, taper "yop les zéros, ca boume ?" renvoie "yop les zeros, ".

    Plus intéressant, taper "yop", entrée, "les", entrée, "zeros", entree, "ca", entrée, renvoie :

    yop
    les
    zeros

    Bref, on prend en compte les newline comme les espaces, tant qu'on n'entre pas l'une des letres comprises entre [^ et ].

    Ce que j'aimerai donc savoir, c'est s'il est possible de faire en sorte de définir un mot dans les crochets, au lieu de plusieurs caractères.

    Ceci afin de faire en sorte de stocker des infos dans une chaine de caractères tant que l'utilisateur n'a pas écrit "!stop!" par exemple.

    Bien sur, je peux utiliser [^#] par exemple, en supposant qu'on utilisera jamais ce caractère autrement que pour dire stop..


    Pour ceux que ça intéresse, attention à un truc, le dernier appui sur entrée reste en mémoire dans stdin ;)

    On peut faire en sorte de lire toute une ligne jusqu'à l'appui sur entrée avec scanf("%[^\n]", chaine); , bref, on prend tous les caractères sauf "\n", qui correspond à l'appui sur entrée :) (et comme dit juste avant, ce dernier appui sur entrée restera donc dans le flux d'entrée stdin, puisqu'on a dit au scanf qu'on ne voulait pas le prendre dans la chaine, il faudra penser à le virer avant de refaire un deuxieme scanf comme ca !)
    • Partager sur Facebook
    • Partager sur Twitter
      28 février 2007 à 23:24:36

      Citation : Oblivion

      Bonsoir !

      Je suis en train de m'interesser aux séquences d'échappement d'un scanf, et l'une d'elle a particulièrement retenu mon attention : les crochets [].


      Trop fort pour moi...

      http://xrenault.developpez.com/tutoriels/c/scanf/
      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        28 février 2007 à 23:43:57

        Extra, cette page est extra, j'ai appris plein de nouveaux trucs en relation avec ces crochets, merci beaucoup !

        Le seul probleme, c'est que ce que je voulais faire n'est pas possible :D
        Bah, je me débroullerai autrement. Finalement, scanf est vraiment quelque chose de puissant lorsqu'on l'utilise avec les séquences d'échappement !

        D'ailleurs, il y a un truc très fort dans tout ça, c'est que la fonction qui est donnée tout en bas dans ce tuto des zéros pour laquelle j'avais tant d'admiration est explosée avec ce genre de code :

            int nombre = 0;

            printf("saisissez un nombre :\n");
            while (!scanf("%d%*[^\n]", &nombre))
                scanf("%*[^\n]");

            getchar();
            printf("saisie acceptee, %d\n", nombre);


        Un gain de place énorme, et une gestion du scanf très intéressante !
        • Partager sur Facebook
        • Partager sur Twitter

        Echappement d'un scanf.

        × 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