Partage
  • Partager sur Facebook
  • Partager sur Twitter

la fonction strlen

    24 octobre 2012 à 14:23:18

    bonjour tt le monde :)
    g un petit probleme concernant l'utilisation de strlen .
    bon mon projet consiste a creer un fichier MotRechercher.txt et utiliser la fonction LireMot(char*S)( imposé par le prof) permettant de lire le mot recherché a partir du fichier txt
    le probleme c'est qu'on je veux calculer la taille du mot je fais
    taille= strlen(S); mais ça fonction pas :colere2::colere2: ; ma question c'est comment je peux utiliser la fonction strlen pour calculer la taille du mot qui se trouve dans le fichier txt .
    Merci d'avance .
    • Partager sur Facebook
    • Partager sur Twitter
      24 octobre 2012 à 14:25:03

      Fais voir le code que tu utilises. Normalement, tu appelles LireMot, et ensuite strlen ; si c'est codé correctement, il n'y a pas de raison pour que ça ne fonctionne pas...
      • Partager sur Facebook
      • Partager sur Twitter
      Staff désormais retraité.
        24 octobre 2012 à 14:39:18

        d'accord mais comme g dis ce code la est imposé par le prof et je dois ajouter des instructions .
        le voila
        #include<stdio.h>
        #include<stdlib.h>
        #include<string.h>
        #define ENTREE"MotRechercher.txt"
        #define Max 50
        
        
        void LireMot(char *S){
             FILE * F_IN;
             if((F_IN = fopen(ENTREE,"r"))==NULL){
                     printf("Erreur d'ouverture du fichier %S",ENTREE);
                     return 0;
                     }                  
        fscanf(F_IN,"%s",S);
        fclose(F_IN);
        }
        
        int main(){
            char mot[Max]; 
            LireMot(mot);            
            system("pause");
            return EXIT_SUCCESS;
        }
        

        et Merciiiiii bcp
        • Partager sur Facebook
        • Partager sur Twitter
          24 octobre 2012 à 14:43:14

          Qu'est ce que le fichier contient ?
          • Partager sur Facebook
          • Partager sur Twitter
          Vous voulez créer des jeux-vidéos en C/C++ ? Vous aimez regarder des gameplays ? Visitez ma chaîne YouTube ;) 
            24 octobre 2012 à 14:46:40

            le fichier contient le mot : porte
            • Partager sur Facebook
            • Partager sur Twitter
              24 octobre 2012 à 14:50:02

              Eh bien, si tu fais un simple printf("%u\n", strlen(mot)), ça fonctionne correctement. À ce propos, la fonction que t'as donné ton professeur n'est pas terrible (où peut-être a-t-elle été altérée entre temps) : le format %S est utilisé pour wchar_t*, pas pour les char*. De plus, la fonction tente de retourner quelque chose, alors qu'elle retourne un void.
              • Partager sur Facebook
              • Partager sur Twitter
              Staff désormais retraité.
                24 octobre 2012 à 14:53:54

                Citation : chayma 92

                g un petit probleme concernant l'utilisation de strlen.


                Elle est où, je ne la vois pas dans ton code ?

                Il manque un espace dans le define ENTREE
                • Partager sur Facebook
                • Partager sur Twitter
                  24 octobre 2012 à 14:55:47

                  Ce code marche :

                  #include <stdio.h>
                  #include <string.h>
                  #define FILE_PATH "tonfichier.txt"
                  #define MAX 50
                  
                  int main(void){
                  	FILE* file = fopen(FILE_PATH,"r");
                  	if(file == NULL)
                  		return -1;
                  	
                  	char mot[MAX] = {0};
                  	
                  	if(fgets(mot, MAX-1, file) != NULL){
                  		unsigned long len = strlen(mot);
                  		printf("Taille du mot => %u\n", len);
                  	}
                  	
                  	else{
                  		//erreur de saisie
                  	}
                  		
                  	fclose(file);
                  	return 0;
                  }
                  


                  Peut-être du à l'espace manquant dans le define...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Vous voulez créer des jeux-vidéos en C/C++ ? Vous aimez regarder des gameplays ? Visitez ma chaîne YouTube ;) 
                    24 octobre 2012 à 14:57:37

                    Merci bcp lucas , je suis encore débutante en programmation et c mon premier projet ...
                    bon si je comprend bien le nom du fichier c'est pas S mais mot ;) et si je veux utiliser ta formule je dois savoir ce que %u veut dire ??
                    merci d'avance
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 octobre 2012 à 15:00:22

                      "%u", si je ne me trompe pas, correspond à unsigned, un entier positif donc ;) .
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Vous voulez créer des jeux-vidéos en C/C++ ? Vous aimez regarder des gameplays ? Visitez ma chaîne YouTube ;) 
                        24 octobre 2012 à 15:02:25

                        C'est préférable oui. :)

                        Tu peux lire ceci.
                        En fait, la fonction strlen renvoie un unsigned int, et l'indicateur de conversion qu'attend printf pour les unsigned int est %u. :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 octobre 2012 à 15:04:15

                          Citation : chayma 92

                          ... et si je veux utiliser ta formule je dois savoir ce que %u veut dire ??


                          on cherche d'abord la doc des formats de printf ( http://msdn.microsoft.com/en-us/librar [...] vs.71%29.aspx )
                          il s'agit du champ 'type', on consulte alors la doc printf Type Field Characters ' http://msdn.microsoft.com/en-us/librar [...] vs.71%29.aspx )
                          et on tombe sur la liste dont

                          Citation

                          u | int | Unsigned decimal integer.

                          • Partager sur Facebook
                          • Partager sur Twitter
                          ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                            24 octobre 2012 à 15:12:41

                            Citation : chayma 92

                            bon si je comprend bien le nom du fichier c'est pas S mais mot ;)


                            En fait, le nom de la variable qui contient le mot dans ta fonction main est bien « mot ». Le nom « S » est uniquement utilisé dans la fonction lireMot, et tu n'as pas à t'en préoccuper dans la fonction main.

                            Citation : chayma 92

                            et si je veux utiliser ta formule je dois savoir ce que %u veut dire ??


                            C'est la même chose que %d, sauf que ça marche pour les entiers non signés (or, la valeur de retour de strlen en est un).
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Staff désormais retraité.
                              24 octobre 2012 à 17:02:19

                              Citation : paraze

                              En fait, la fonction strlen renvoie un unsigned int


                              Non, strlen renvoie un size_t ; ce qui correspond généralement à unsigned long sur un système moderne.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 octobre 2012 à 17:31:53

                                svp g pas encore saisi bien les choses .
                                j'ai essayé de débuter a nouveau mé ça marche pas
                                voici mon code
                                #include<stdio.h>
                                #include<stdlib.h>
                                #include<string.h>
                                #define ENTREE " MotRechercher.txt "
                                #define Max 50
                                
                                void LireMot(char *S){
                                     FILE * F_IN;
                                     if((F_IN = fopen(ENTREE,"r"))==NULL){
                                             printf("Erreur d'ouverture du fichier %S",ENTREE);
                                             return 0;
                                             }                  
                                fscanf(F_IN,"%s",S);
                                fclose(F_IN);
                                }
                                
                                int main(){
                                    char mot[Max]; // le mot a recherché.
                                    LireMot(mot);
                                    int taille ;
                                    
                                    
                                   
                                   taille= strlen(mot);
                                   printf( " Le mot a chercher se compose de %d caracteres :" , taille );
                                       
                                       
                                
                                    
                                    
                                    
                                    
                                    
                                    system("pause");
                                    return EXIT_SUCCESS;
                                }
                                


                                le probleme c'est qu'il affiche 19 caracteres par contre j'ai ecris seulement un mot de 3 caracteres dans le fichier txt c vraiment gênant .
                                Merci d'avance pour l'aide
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 octobre 2012 à 17:54:01

                                  Si tu es sous windows, ton fichier est bien enregistré au format ANSI ?

                                  Citation : Lucas-84

                                  le format %S est utilisé pour wchar_t*, pas pour les char*. De plus, la fonction tente de retourner quelque chose, alors qu'elle retourne un void.

                                  Tu n'as toujours pas corrigé ?!

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 octobre 2012 à 18:29:05

                                    Bon déjà avec une indentation un peu plus claire ça devrait être plus simple :

                                    #include <stdio.h>
                                    #include <stdlib.h>
                                    #include <string.h>
                                    
                                    #define ENTREE " MotRechercher.txt "
                                    #define Max 50
                                    
                                    void LireMot(char *S){
                                        FILE * F_IN;
                                        if((F_IN = fopen(ENTREE,"r"))==NULL){
                                            printf("Erreur d'ouverture du fichier %S",ENTREE);
                                            return 0;
                                        }
                                    
                                        fscanf(F_IN,"%s",S);
                                        fclose(F_IN);
                                    }
                                    
                                    int main(void){
                                        char mot[Max] = ""; // le mot a rechercher.
                                        int taille;
                                    
                                        LireMot(mot);
                                       
                                        taille = strlen(mot);
                                        printf( " Le mot a chercher se compose de %d caracteres :" , taille );
                                        
                                        return EXIT_SUCCESS;
                                    }
                                    


                                    Tiens au fait, chez moi ton code fonctionne très bien. Peut-être parce que j'ai enlevé les espaces dans les guillemets du premier #define avant de compiler. ;)
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    la fonction strlen

                                    × 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