Partage

la fonction strlen

Le 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 .
Publicité
Le 24 octobre 2012 à 14:23:18
Le 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...
Staff désormais retraité.
Le 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
Le 24 octobre 2012 à 14:43:14

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

le fichier contient le mot : porte
Le 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.
Staff désormais retraité.
Le 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
Désolé, mais je ne réponds plus au sujet du plus ou moins. Mais aussi si le code est vraiment très mal présenté.
Le 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...
Vous voulez créer des jeux-vidéos en C/C++ ? Vous aimez regarder des gameplays ? Visitez ma chaîne YouTube ;) 
Le 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
Le 24 octobre 2012 à 15:00:22

"%u", si je ne me trompe pas, correspond à unsigned, un entier positif donc ;) .
Vous voulez créer des jeux-vidéos en C/C++ ? Vous aimez regarder des gameplays ? Visitez ma chaîne YouTube ;) 
Le 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. :)
Vive progdupeu.pl – Règles du forum C – Divers conseils pour mieux programmer en C (et plus si affinité)
Le 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.

** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
Le 24 octobre 2012 à 15:10:52

Merciiiii les gars :)
Le 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).
Staff désormais retraité.
Le 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.
Le 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
Le 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é ?!

Désolé, mais je ne réponds plus au sujet du plus ou moins. Mais aussi si le code est vraiment très mal présenté.
Le 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. ;)
Vive progdupeu.pl – Règles du forum C – Divers conseils pour mieux programmer en C (et plus si affinité)

la fonction strlen

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown