1. #1
    Candidat au Club Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 6
    Points : 2
    Points
    2

    Par défaut Problème expression getchar

    Bonjour , je débute en langage C et je rencontre un problème pour évaluer la fonction getchar.

    Voici mon 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
     
    #include <stdio.h>
     
    int main()
    {
    	int w;
     
    	 w = (getchar() != EOF) ;
    	putchar(w);
     
        printf("\n");
     
    	return 0;
    }
    La compilation se passe sans erreur cependant lorsque j'essaye mon programme, la ligne putchar(w); affiche un caractère bizarre

    Nom : Capture du 2018-06-13 16-44-05.png
Affichages : 51
Taille : 11,9 Ko

    Savez-vous d'où vient le problème et comment le résoudre ?
    En vous remerciant par avance de votre aide.

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    5 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 5 212
    Points : 22 178
    Points
    22 178

    Par défaut

    Salut,

    qu'entends-tu par évaluer la fonction getchar ?
    getchar retourne un caractère sous forme d'int, ou EOF si on a atteint la fin du flux.
    Toi tu stockes dans w (getchar() != EOF) qui n'est pas un caractère mais une expression booléenne, une expression vraie/fausse. Donc w va valoir soit 1 (vrai) soit 0 (faux), mais les caractères 0 et 1 de la table ASCII ne sont pas vraiment imprimables. 0 correspond au caractère nul, à la fin de chaîne, 1 correspond au code de début d'en-tête.
    https://www.asciitable.com/

    à priori le code devrait plus ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    w = getchar();
    if (w != EOF)
      putchar(w);
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Candidat au Club Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    Bonjour, merci pour votre réponse

    Pardon je me suis mal exprimé.
    Concernant les caractères 0 et 1 de la table ASCII, n'y aurais t’il pas moyen de les faire afficher en sortie sinon que je tape un caractère (0) ou non (1) ?

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    6 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 6 313
    Points : 17 719
    Points
    17 719
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par CaptainKrabs Voir le message
    Concernant les caractères 0 et 1 de la table ASCII, n'y aurais t’il pas moyen de les faire afficher en sortie sinon que je tape un caractère (0) ou non (1) ?
    Bonjour

    Pas facile de te comprendre (ce "sinon que je tape" me laisse un peu sec quant au sens de cette phrase).

    Un caractère c'est un nombre compris entre 0 et 255. Certains caractères sont affichables (leur valeur correspond à un symbole lisible à l'écran). Par exemple le caractère de valeur 97 s'affichera (si tu demandes le bon format d'affichage) sous la forme d'un 'a'.
    De là peut naitre une certaine confusion entre "la valeur du caractère" et "son symbole d'affichage". Surtout quand ce symbole prend la forme d'un chiffre (exemple le symbole '1' correspond au caractère de valeur 49).
    Toutefois on peut établir une correspondance entre "valeur des caractères allant de 0 à 9" et "symboles correspondants allant de '0' à '9'". Si par exemple tu as le caractère de valeur 5, cette valeur ne possède pas de symbole affichable correspondant. Mais si tu veux, quand tu as la valeur 5, afficher '5', c'est pas très compliqué: suffit de rajouter à cette valeur le chiffre 48 (qui correspond au symbole '0') et tu obtiendras alors '5'.
    Exemple: char w=5; printf("%c", w + '0'); // Tu obtiendras alors '5' à l'écran.

    Accessoirement (et par commodité), la notion de "valeur d'un caractère" devient "code ascii" et la notion de "symbole d'affichage" devient plus simplement "caractère". Ainsi on dit alors que le caractère 'a' a pour code ascii 97.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  5. #5
    Candidat au Club Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 6
    Points : 2
    Points
    2

    Par défaut

    Merci beaucoup c'est plus clair maintenant.

    Etendu mais "saisir" .

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

Discussions similaires

  1. Problème expression régulières
    Par LEK dans le forum C#
    Réponses: 2
    Dernier message: 18/04/2007, 11h40
  2. Problème Expression conditionnelle
    Par nicolasferraris dans le forum ASP
    Réponses: 6
    Dernier message: 15/03/2007, 09h52
  3. problème expression régulière
    Par H-bil dans le forum Regex
    Réponses: 4
    Dernier message: 13/02/2007, 15h38
  4. Problème expressions régulières
    Par sozie9372 dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 15h13
  5. Problème expression regulière ??
    Par panaone dans le forum Langage
    Réponses: 5
    Dernier message: 18/08/2005, 13h41

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