Partage
  • Partager sur Facebook
  • Partager sur Twitter

création de fonction comme getc sur une string

Commentaire

    13 juin 2021 à 18:13:47

    bonjour, j'ai crée une fonction fait la même chose que getc mais sur une string:

    #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    
    char sgetc(char* str, int len, int change) {
    	static int nb = 0;
    	static char* string = str;
    	string = (change) ? str : string;
    	char n = (! change) ? ((string == str) ? (( len > nb) ? string[nb]: NULL) : NULL); 
    	nb++;
    	return n;}
    
    

    example:

    #include "sgetc.h"
    
    int main(void) {
       char myString[20] = "hello la compagnie ";
       char c = NULL;
       do {
           c = sgetc(myString, 18, false);
           printf("%c\n", c);
       while(c != NULL)
          
    }

    qui affiche :

    h
    e
    l
    l
    o
    
    l
    a
    
    c
    o
    m
    p
    a
    g
    n
    i





    -
    Edité par TheSmiley 13 juin 2021 à 18:16:44

    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2021 à 18:27:26

      Oui, et quel est ta question ?

      Ton code compile ? Parce que chez moi, il ne compile pas !

      • Partager sur Facebook
      • Partager sur Twitter
        13 juin 2021 à 18:50:18

        DESOLE , chez moi aussi , ma question est  comment résoudre ceci:

        comment résoudre cecimain.c:17:34: error: initializer element is not constant

        le code:

        #include <stdio.h>
        #include <stdio.h>
        #include <stdlib.h>
        #include <stdbool.h>
        #include <string.h>
        #define TRUE 1
        #define FALSE 0
        char sgetc(const char* str, int len, int change) {
            static  int nb = 0;
            static  char* string = &str;
            char n;
            if(! change) {
                if(string == str) {
                    if(len > nb) {
                        n = string[nb];
                    }
                    else {
                        n = 0;
                    }
                }
                else {
                    n = 0;
                }
            }
            
            return n;
            
        }
        
        
        int main(void) {
            const char myString[20] = "hello la compagnie ";
            char c = 0;
            do {
                c = sgetc(myString, strlen(myString), FALSE);
                printf("%c\n", c);
                
            }while(c != 0);
            return 0;
        }
        




        -
        Edité par TheSmiley 13 juin 2021 à 18:57:54

        • Partager sur Facebook
        • Partager sur Twitter
          13 juin 2021 à 18:54:00

          Je ne vois pas l'intérêt puisque tu fais une boucle de toute façon et testes les mêemes choses de façon différente:
          for(int i=0; myString[i] != '\0'; i++)  printf("%c\n", myString[i]);
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            13 juin 2021 à 19:07:08

            la liste peut êtres autre qu'une liste de char donc là la boucle for ne sert à rien si tu ne sais pas la taille du tableau

            ou alors tu veux savoir si la liste fait plus de element sans utiliser try...catch pr example:

            //On veut savoir la taille de MyList , on sait juste que la taille est entre 1 et 9
            char n = 0;
            int q = 0;
            for (int i=0; i < 10 ; i++) {
               n = sgetc(MyList, FALSE);
               if(n == 0) {
                  q = i;
                  break;
               }
            }
            printf("la taille du tableau est %d" , q)

            PS: je vais réparer l'erreur puis essayé de supprimer le parametre

            -
            Edité par TheSmiley 13 juin 2021 à 19:08:36

            • Partager sur Facebook
            • Partager sur Twitter
              13 juin 2021 à 19:07:49

              AntoineBarbier12 a écrit:

              comment résoudre cecimain.c:17:34: error: initializer element is not constant

              C'est parce que tu ne peux pas initialiser une variable static avec une variable.



              -
              Edité par rouloude 13 juin 2021 à 19:08:44

              • Partager sur Facebook
              • Partager sur Twitter
                13 juin 2021 à 19:09:22

                rouloude a écrit:

                AntoineBarbier12 a écrit:

                comment résoudre cecimain.c:17:34: error: initializer element is not constant

                C'est parce que tu ne peux pas initialiser une variable static avec une variable.



                -
                Edité par rouloude il y a moins de 5s

                je veux juste récupérer sa valeur

                • Partager sur Facebook
                • Partager sur Twitter
                  13 juin 2021 à 20:46:46

                  AntoineBarbier12 a écrit:

                  je veux juste récupérer sa valeur

                  La valeur de quoi ? 

                  Et pourquoi la mettre en static ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 juin 2021 à 21:30:13

                    AntoineBarbier12 a écrit:

                    bonjour, j'ai crée une fonction fait la même chose que getc mais sur une string

                    C'est à dire, quel doit être le comportement de cette fonction exactement, parce-que là je vois pas... Tu utilises bien les index pour accéder à chaque caractère ?

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                      13 juin 2021 à 23:08:46

                      A ce que j'ai cru comprendre, en simplifié, c'est quelque chose comme cela qu'il veux faire :

                      #include <stdio.h>
                      
                      char sgetc(const char* str)
                      {
                          static  int nb = 0;
                          return str[nb++];
                      }
                      
                      int main(void)
                      {
                          const char myString[20] = "hello la compagnie ";
                          char c = 0;
                          do
                          {
                              c = sgetc(myString);
                              printf("%c\n", c);
                          }
                          while(c != 0);
                          return 0;
                      }



                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 juin 2021 à 0:43:02

                        Bonjour,

                        sinon il y a la solution fmemopen … sur les systèmes posix.

                        La remarque est inutile s'il s'agit d'un exercice, ou d'une plateforme windows.

                        • Partager sur Facebook
                        • Partager sur Twitter

                        création de fonction comme getc sur une string

                        × 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