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
Je peux à nouveau éditer mes messages ! J'ai du pour cela changer de navigateur ! Les temps ont bien changés !
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 – Le célébrissime 2048... en rust !
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é ?!

Je peux à nouveau éditer mes messages ! J'ai du pour cela changer de navigateur ! Les temps ont bien changés !
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 – Le célébrissime 2048... en rust !

la fonction strlen

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