IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème de condition


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 110
    Par défaut Problème de condition
    Bonsoir,

    J'ai un petit probléme auquel je n'arrive pas à trouver de solution surtout que je ne comprends pas , c'est une histoire de condition le programme devrait rentrer dans ma condition et executer le code que je lui demande or ça ne le fait pas .. Excusez moi d'avoir poster l'ensemble de mon code vu que tout y est lié ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    #include <stdio.h>
    #include <stdlib.h>
     
    #define T    20
    #define TRUE    1
    #define FALSE   0
     
    char recherche(char str[], char c)
    {
    	int i, longu=0, lecture;
    	for (i=0;i<longu;i++)
    	{
    		if (str[i]==c)
    		{
    			lecture=TRUE;
    			break;
    		}
    		else
    		{
    			lecture=FALSE;
    		}
    	}
    	if(lecture != TRUE){
    	printf("caractere inexistant.\n");}
    	else{
    	printf("Caractere OK.\n");}
    }
     
    int nb_car (char str[])
    {
    	int i, nb_element=0;
    	for (i=0;str[i] != '\0';i++)
    	{
    		nb_element++;
    	}
     
    	printf("Nombre de caracteres: %d\n",nb_element);
    }
     
    char remplacer_car(char str[], char str2[], char c1, char c2)
    {
    	int i, j=0, longu=0;
    	longu=strlen(str);
    	for(i=0;i<longu;i++)
    	{
    		if (str[i]==c1)
    		{
    			str[i]=c2;
    		}
    	}
     
    	strcpy(str2,str);
     
    	printf("%c -> %c : %s\n",c1,c2,str2);
    }
     
    int compte_car(char str[],char c)
    {
    	int i,longu=0,nb_c=0;
    	for (i=0;i<longu;i++)
    	{
    		if (str[i]==c)
    		{
    			nb_c++;
    		}
    	}
     
    	printf("Nombre de %c: %d\n",c,nb_c);
    }
     
     
    int main()
    {
    	FILE *fichier=NULL;
    	char fich[T];
    	char buffer[500];
    	char car;
    	int lecture;
     
    	printf("Entrer fichier:");
    	scanf("%s",fich);
     
    	fichier = fopen(fich,"rb");
     
    	if (!fichier){
    	exit(0);}
     
    	lecture=fgets(buffer, sizeof(buffer), fichier);
     
    	if (lecture != FALSE) // C'est ici: Si la lecture est bonne alors on rentre dans la condition
    	{
    		nb_car(buffer);
    		printf("Entrer le caractere a rechercher:");
    		scanf("%c",&car); //Ici, il ne veut pas laisser la possibilité à l'utilisateur d'entrer un caractère le programme s'achève ...
     
    		recherche(buffer,car);
    		compte_car(buffer,car);
     
    	}
     
    	else
    	{
    		exit(0);
    	}
     
    	system("pause");
    	return 0;
    }
    Merci de votre attention

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	int i, longu=0, lecture;
    	for (i=0;i<longu;i++)
    	{
    comme i == 0 et longu == 0, la condition i<longu n'est pas satisfaite et on n'exécute pas la boucle for (erreur répétée plusieurs fois dans le code)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 110
    Par défaut
    a oui mince longu=strlen(str); mais malgré ça, le code ne veux pas s'executer dés qu'il entre dans le if il termine le prog direct sans saisie de frappe de l'utilisateur ... faut il mettre un getchat();?


    EDIT: En faite j'ai une seconde question par exemple dans mon fichier j'ai ligne :
    salut
    bonjour

    mais mon buffer ne prend pas en compte les \n je pense devoir mettre while (getchar() != "\n") .. merci

  4. #4
    Membre Expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Par défaut
    Bonjour,

    Regarde dans la FAQ les fonctions sur les chaines de caractères, la comparaison n'est pas faite par == mais par des fonctions tels que strcmp.

    http://c.developpez.com/faq/?page=st...STRINGS_strcmp

    C'est pour cela qu'il affecte la valeur false à lecture.
    Cordialement,
    CHristophe

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 110
    Par défaut
    Il m'indiquait false parce que j'avais fait une erreur dans ma fonction je ne l'ai pas parcouru de plus j'avais oublié getchar(); aprés le scanf() mais le probléme dans le code c'est ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (fgets(buffer, sizeof(buffer), fichier) != NULL)
    {
        nb_car(buffer);
    }
    Pour que le prof m'affiche le nombre de caractere sur l'ensemble de la chaine mais les resultats sont trés etranges .. j'ai mon fichier test.txt qui contient :

    bonjour
    salut

    et sur ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    FILE *fichier=NULL;
        char buffer[500];
        int i, longu=0, nb=0;
     
        fichier=fopen("test.txt","rb");
     
        while (fgets(buffer,sizeof(buffer),fichier) != NULL)
        {
              longu=strlen(buffer);
              for (i=0;i<longu;i++)
              {
                  ++nb;
                  }
                  printf("%d\n",nb);
                  }
    Au lieu de m'afficher l'ensemble des caractéres il affiche :
    9
    16

    Je ne comprends pas puisque bonjour est composé de 7 car et salut de 5 de plus je ne comprend pas pourquoi me les afficher sur chaque ligne et pourquoi ça ne met pas l'ensemble des caractere sur ligne par exemple 12..

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    1- Ouvre ton fichier en mode texte (et tu devrais tester si l'ouverture s'est bien passée : fichier != NULL)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier=fopen("test.txt","r");
    2- Il faut savoir que fgets() met dans la chaine le '\n'. Tu auras donc 1 caractère de trop dans ton buffer

    de plus je ne comprend pas pourquoi me les afficher sur chaque ligne et pourquoi ça ne met pas l'ensemble des caractere sur ligne par exemple 12..
    En fait, tu veux que ça fasse quoi exactement ?

Discussions similaires

  1. [débutant] problème de condition dans une requete
    Par banker dans le forum Access
    Réponses: 5
    Dernier message: 22/03/2006, 13h52
  2. Réponses: 7
    Dernier message: 27/02/2006, 18h04
  3. [Debutant]Problème de condition
    Par ghan77 dans le forum Langage
    Réponses: 9
    Dernier message: 13/12/2005, 15h20
  4. Problème de condition, je flanche..
    Par KibitO dans le forum Langage
    Réponses: 13
    Dernier message: 11/11/2005, 12h57
  5. Réponses: 6
    Dernier message: 17/08/2005, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo