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 conversion


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Par défaut problème de conversion
    Bonjour,

    voilà l'exercice à résoudre

    écrire un programme qui lit une chaîne de caractères CH et qui convertit toutes les majuscules dans des miniscules et vice -versa.
    Le résultat sera mémorisé dans la même variable CH et affiché après la conversion
    .

    On me donne ce corrigé

    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
    #include<stdio.h>
     
    main()
    {
    	char CH[100];
    	int I;
     
    	printf("ecrire une chaine : ");
    	gets(CH);
     
    	for(I=0;CH[I];I++)
    	{
    		if(CH[I]>='A'&&CH[I]<='Z')
    		CH[I]=CH[I]-'A'+'a';
     
    		else if(CH[I]>='a'&&CH[I]<='z')
    			CH[I]=CH[I]-'a'+'A';
    	}
    	printf("chaine convertie : %s\n",CH);
     
    	return 0;
    }
    Je voudrais savoir pourquoi mon programme ne fonctionne pas et comment utiliser les fonctions tolower et toupper ?

    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
    #include<stdio.h>
     
    main()
    {
        char CH[100];
        int I,J;
     
        printf("ecrire une chaine : ");
        gets(CH);
     
        for(I=0;CH[I];I++)
        {
            I=toupper(CH);
            printf("%s",CH[I]);
        }
     
        for(J=0;CH[J];J++)
        {
            J=tolower(CH);
            printf("%s",CH[J]);
        }
        printf("\n");
     
        return 0;
    }

  2. #2
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Le langage C fait la difference pour les noms de variable avec des majuscules et minuscule.
    Autrement dit i et I ne represente pas la même variable.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    parce que tu demandes d'afficher un caractère (CH[i]) avec le format d'une chaîne (%s).

    Si tu mettais %c , ça marcherait

    plsu la remarque précédente bien entendu

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    On me donne ce corrigé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include<stdio.h>
     
    main()
    {
    	char CH[100];
    	int I;
     
    	printf("ecrire une chaine : ");
    	gets(CH);
    "on" devrait apprendre à coder en C...

    gets() est est un bug qu'il ne faut pas utiliser.

    http://emmanuel-delahaye.developpez....e=Page6#LXXXII
    http://emmanuel-delahaye.developpez....=Page6#LXXXIII

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2004
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 304
    Par défaut
    ton programme ne répond pas à la question posé
    Exemple : CH = "Un Exemple";
    L'exercice veux qu'on est en résultat la chaine "uN eXEMPLE"
    Ton code lui ne faire rien de tout ça!!

    un lien vers une explication de tolower et toupper
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int toupper (int c); //convertit la lettre c en majuscule si c'est possible.
    int tolower (int c);//convertit la lettre c en minuscule si c'est possible.
    Je vais essayer d'imaginer ce que tu voulais faire en commentant ton code (juste la partie qui nous intéresse).

    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
     
        for(I=0;CH[I];I++)
        {
            I=toupper(CH);
            //1ere erreur : CH[I] et non pas CH
            //2eme erreur : tu change I, I qui est TON ITERATEUR, qu'on ne TOUCHE JAMAIS!! Sauf si on sais ce qu'on est en train de faire
            printf("%s",CH[I]);
        }
    // l'idée de ce bout de ton code est de changer chaque lettre de ta chaine en minuscule 
    //une correction de ton idée (pour changer la chaine en minuscule) serait
        for(I=0;CH[I];I++)
        {
            CH[I]=toupper(CH[I]);
        }
        printf("%s",CH);// On affiche toute la chaine
    La suite de ton code fait l'inverse, c'est à dire, mettre toute la chaine en Majuscule
    Le résultat d'un tel code, après correction, serait (pour la chaine "Un Exemple")
    Chaine d'entrée : Un Exemple
    Résultats :
    un exemple
    UN EXEMPLE

    FAUX!!
    EDIT : les "I" sont bien en majuscules dans le code, mais vue que [I] en BB veut dire italique ...

  6. #6
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Par défaut
    Essais de placer des conditions telles que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(CH[i]<=z && CH[i]>=a) CH[i]=toupper(CH[i]);
    else if(CH[i]<=Z && CH[i]>=A) CH[i]=tolower(CH[i]);
    else return EXIT_FAILURE;

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par rilou Voir le message
    Essais de placer des conditions telles que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(CH[i]<=z && CH[i]>=a) CH[i]=toupper(CH[i]);
    else if(CH[i]<=Z && CH[i]>=A) CH[i]=tolower(CH[i]);
    else return EXIT_FAILURE;
    Tant qu'à faire, autant utiliser isupper() et islower() plutôt que les comparaisons à la main. C'est plus portable et plus cohérent.

  8. #8
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 143
    Par défaut
    Citation Envoyé par gl Voir le message
    Tant qu'à faire, autant utiliser isupper() et islower() plutôt que les comparaisons à la main. C'est plus portable et plus cohérent.
    En effet :s Autant pour moi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31
  3. Problème de conversion 3DS->.X
    Par JBernn dans le forum DirectX
    Réponses: 5
    Dernier message: 08/04/2004, 19h08
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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