Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] 'espace' et les tableaux

pris en compte ou pas ?

Sujet résolu
    11 avril 2006 à 23:24:42

    Salut,

    J'ai fait ce petit programme pour verifier la presence d'un mot dans un tableau :

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

    int main()
    {
        char t[50]={0};
        int i=0;

        scanf("%s", t);

        for(i;i<50;i++)
        {
            if(t[i]=='l' && t[i-1]=='i' && t[i-2]=='e' && t[i-3]=='l' && t[i-4]=='o' && t[i-5]=='s')
                printf("ya du soleil");
        }

            return 0;
    }


    ici je teste volontairement la presence de soleil.

    Seulement des que je met un espace dans le tableau cela fait comme si le tableau se cassait.

    exemple si je rentre

    testsoleiltest

    cela me sort
    ya du soleil


    et si je met soleil apres un espace :

    test soleiltest

    cela ne me donne rien.

    L'espace n'est donc pas un caractere ?? pourtant si je tappe :
    testsoleiltest
    (la ya des espace devant mais ca se voit pas)
    cela me sort
    ya du soleil


    je suis un peu perdu la .

    Pourrait on m'expliquer ? merci encore (et si vous aviez moyen de me dire si ma logique pour tester la presence d'un mot est bonne ?)

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2006 à 23:32:53

      strstr
      résoudra tes problèmes je pense.
      • Partager sur Facebook
      • Partager sur Twitter
        11 avril 2006 à 23:34:29

        scanf prends jusqu'a ce que tu rentres espace

        et tu ne peux pas mettre i=0

        mets i=5

        parce que la, tu prends des adresses que tu n'as pas completé toi meme
        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2006 à 23:40:03

          kayl => je cherche a le faire sans l'aide de ces fonctions :p
          Atapi => oui je sais, je rectifie ca (et mon i tout seul aussi car ca me met un "warning statement with no effect") mais normalement dans le cas present je m' arrange pour faire plus de 5 caracteres
          • Partager sur Facebook
          • Partager sur Twitter
            11 avril 2006 à 23:44:00

            Pourquoi tu lis à l'envers soleil ? Pourquoi pas commencer à l'indice i avec s, i+1 = o ?
            • Partager sur Facebook
            • Partager sur Twitter
              11 avril 2006 à 23:48:58

              Oui mais ca revient au même, soit je vais de 0 à 45 soit de 5 a 50 non ?

              Mais c'est marqyé dans le cours que espace stoppe le scanf ?
              • Partager sur Facebook
              • Partager sur Twitter
                11 avril 2006 à 23:50:10

                je serais toi, je ferais deux chaines

                une avec ta phrase et l'autre avec le mot a chercher

                et je ferais deux boucles imbriquées pour faire la recherche
                • Partager sur Facebook
                • Partager sur Twitter
                  11 avril 2006 à 23:51:53

                  Citation : http://www.cplusplus.com/ref/cstdio/scanf.html


                  s String of characters. This will read subsequent characters until a whitespace is found (whitespace characters are blank, newline and tab).




                  Donc je te conseille gets dans ton cas.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 avril 2006 à 23:55:14

                    Merci kayl ( ou cplusplus.com ? ;) ) je suis fixé ^^ mais dans ce cas est il possible de dire : si l'on rentre espace alors remplacer par "_" ? (donc je ferais une boucle de scan de caracteres)

                    Sinon Atapi tu veux dire quoi par 2 boucles imbriqués ? :

                    si je trouve la premiere lettre alors chercher la secondes et ainsi de suite ?

                    EDIT : ca marche !! merci beaucoup , pourquoi est que Matéo n'as pas introduit gets à la place de scanf(%s) ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 avril 2006 à 23:58:21

                      Citation : Kayl

                      Donc je te conseille gets dans ton cas.


                      gets() est un bug qu'il ne faut pas utiliser
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                        11 avril 2006 à 23:59:27

                        ah ? et pourquoi donc ?

                        EDIt : ca bouffe trop de memoire ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 avril 2006 à 0:02:50

                          Citation : Sateth

                          ah ? et pourquoi donc ?


                          Parce qu'il n'existe pas de moyen portable de limiter le nombre de caractères saisis. (pas de paramètre 'taille' contrairement à fgets())

                          C'est un bug exrêmement connu qui est même signalé par certains compilateurs ou linkers, sans parler des pages 'man' sérieuses :

                          http://dpobel.free.fr/man/html/affiche_man.php/1175/man/gets/


                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            12 avril 2006 à 0:04:59

                            Font chier ces sites de merdes (cppreference, cplusplus), ils pourraient le dire...

                            Bon donc pour ton problème john utilise fgets sur STDIN alors.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 avril 2006 à 0:06:26

                              Citation : Kayl

                              Font chier ces sites de merdes (cppreference, cplusplus), ils pourraient le dire...


                              Bah, c'est comme les pointeurs. Ca fait partie de la 'culture C'...

                              Citation : Kayl

                              Bon donc pour ton problème john utilise fgets sur STDIN alors.


                              stdin.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Music only !
                                12 avril 2006 à 0:09:15

                                Citation : -ed-

                                Bah, c'est comme les pointeurs. Ca fait partie de la 'culture C'...


                                Oui mais de là à voiler l'info c'est naze, sites de merde je réitère ! :D

                                Citation : -ed-

                                stdin


                                Crack encore un exemple : j'ai juste fait un copier coller de http://www.cppreference.com/stdio/gets.html sans vérifier (ça se voit tant que ça que je suis plus C++ ? :p )
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  12 avril 2006 à 0:11:26

                                  euh

                                  char * fgets (char * s, int n, FILE * fic);


                                  Je suis obligé d'introduire un fichier la :/ ca fait beaucoup non ? ^^ ya pas plus simple ??
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 avril 2006 à 0:13:59

                                    Sateth > utilise stdin littéralement. C'est un FILE * prédéfini pour l'entrée standard. T'en fais pas t'as pas de open,close ou quoi que ce soit à faire.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      12 avril 2006 à 0:14:40

                                      Citation : Sateth

                                      euh

                                      char * fgets (char * s, int n, FILE * fic);



                                      Je suis obligé d'introduire un fichier la :/ ca fait beaucoup non ? ^^ ya pas plus simple ??


                                      stdin est un flux prédefini... Mais jamais personne n'ouvre de livre de C ici ?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Music only !
                                        12 avril 2006 à 0:15:56

                                        d'accord donc dans mon cas c'est :

                                            fgets(t, 50, stdin);


                                        qui semble marcher mais sait on jamais ^^

                                        Edit : non je lis pas de livre de C bien que je voudrais bien ^^

                                        Et bien merci a vous deux j'en ai appris pas mal aujourd'hui :p ( que gets c'est le diable (c'est un peu comme le carving en mapping ^^), que fgets c'est mieux et que stdin est un file predefini :))

                                        Merci merci ^^ (au début j'avais #include <stdin.h> ^^
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          12 avril 2006 à 0:18:11

                                          Citation : Sateth

                                          d'accord donc dans mon cas c'est :

                                              fgets(t, 50, stdin);



                                          qui semble marcher mais sait on jamais ^^


                                          Si t est un tableau, je conseille
                                              fgets(t, sizeof t, stdin);

                                          Maintenant, comme tu as lu la doc de fgets(), tu sais que quand il a la place, il prend tout, y compris le '\n'...

                                          Pour tes prochaines questions :

                                          http://mapage.noos.fr/emdel/notes.htm#saisie
                                          http://mapage.noos.fr/emdel/notes.htm#fichiers

                                          Pour les livres de C, il y a des références de livres et de tutoriels sur mon site.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Music only !
                                            12 avril 2006 à 0:20:41

                                            Citation : Kayl

                                            Allez dans la série j'apprends à faire mon -ed- :

                                            http://dpobel.free.fr/man/html/affiche_man.php/3465/man/stdin/


                                            Parfait. Savoir utiliser les ressources fait partie intégrante de ce métier.

                                            Cadeau :

                                            http://dpobel.free.fr/man/html/affiche_man.php/969/man/fgets/
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Music only !
                                              12 avril 2006 à 0:21:11

                                              Merci de la correction et des sites ;)

                                              Mais pourquoi sont ils si austères :-°
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                12 avril 2006 à 0:22:33

                                                Citation : Sateth

                                                Merci de la correction et des sites ;)

                                                Mais pourquoi sont ils si austères :-°



                                                C'est important ? Ce qui compte c'est qu'ils soient justes. On fait de la technique là. Pas du tagada tsoin tsoin...

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Music only !
                                                  12 avril 2006 à 0:28:29

                                                  oui mais je maintient que c'est quand même plus captivant de lire un wiki (qui est sobre) que ces sites.

                                                  Mais ne t'inquiete pas je vais lire ca :) (comme jai lu les infos que m'avait filer bluestorm sur Caml :p)

                                                  faut toujours qu'on nous pousse a progresser, rhallala sur ce site pas moyen de stagner ;)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    12 avril 2006 à 0:36:01

                                                    Citation : Sateth

                                                    oui mais je maintient que c'est quand même plus captivant de lire un wiki (qui est sobre) que ces sites.


                                                    J'ai du mal à voir la différence... Je dois être trop vieux...

                                                    Le vrai 'austère', c'est ça :

                                                    ftp://ftp.rfc-editor.org/in-notes/rfc4146.txt

                                                    Citation : Sateth


                                                    faut toujours qu'on nous pousse a progresser, rhallala sur ce site pas moyen de stagner ;)


                                                    Ah non. C'est comme les requins, si tu t'arrêtes, tu meurs...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Music only !

                                                    [C] 'espace' et les tableaux

                                                    × 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