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 getchar débutant :? [Débutant(e)]


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Dev/Adm Sys/Réseau
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Dev/Adm Sys/Réseau

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Par défaut Problème getchar débutant :?
    Bonjour,

    Depuis (très) peu j'apprend le C avec un livre.

    Histoire de mettre un peu en application le peu que j'ai appris j'ai décidé de creer un programme qui convertir une température Fahrenheit en Celsius.

    Je voudrais que le programme demande "Qu'elle température en Fahrenheit on souhaite convertir en Celsius" puis grâce à getchar récupérer le nombre tapé mais j'ai un problème; quand le programme fait le calcul pour transformé les Fahrenheit en Celsius, il utilise la valeur ASCII du nombre entrée...

    Mon autre problème c'est que getchar ne récupére que le premier caractère donc on ne peut utiliser que les chiffres de 0 à 9 :/

    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
    #include <stdio.h>
    #include <windows.h>
    #include "econio.h"
     
    main()
    {
    	int fahr;
    	float celsius;
     
    	printf("Entrer une temp\x82rature en Fahrenheit que vous voulez convertir en celsius\n\n");
     
    	fahr=getchar();
     
    	//Formule de conversion des Fahrenheit en Celsius
    	celsius=(5.0/9.0)*(fahr-32.0);
     
    	printf("%c degr\x82(s) Fahrenheit est \x82gale \x85 %3.1f degr\x82(s) Celsius\n\n", fahr, celsius);
     
    	printf("Appyuer sur une touche pour quitter");
     
    	//Indique une couleur d'écriture noir pour ne pas voir le 
    	//"Appuyer sur une touche pour continuer"
    	textbackground(BLACK);
    	textcolor(BLACK);
    	system("pause");
    }
    Merci de votre aide

  2. #2
    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 scottynou
    Depuis (très) peu j'apprend le C avec un livre.
    Peux-tu citer ce livre, parce que ce que je vois après est horrible...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Peux-tu citer ce livre, parce que ce que je vois après est horrible...
    Ca ne doit pas venir du livre, mais d'une mauvaise lecture de celui-ci ou une mauvaise application des enseignements donnés par ce livre.

    getchar ne prend qu'un caractère (un char). Tu trouveras ton bonheur auprès de la fonction fgets.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Bonjour, je me suis permi de remanier le code, tu m'en veux pas j'éspère.

    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
    main()
    {
    	int fahr;
    	float celsius;
     
    	printf("Entrer une temp\x82rature en Fahrenheit que vous voulez convertir en celsius\n\n");
     
    	scanf("%d",&fahr);
     
    	//Formule de conversion des Fahrenheit en Celsius
    	celsius=(5.0/9.0)*(fahr-32.0);
     
    	printf("%d degr\x82(s) Fahrenheit est \x82gale \x85 %3.1f degr\x82(s) Celsius\n\n", fahr, celsius);
     
    	printf("Appyuer sur une touche pour quitter");
     
     
    	getch();
    	printf("\n\n\nfin du programme ...\n");
    	return(0);
    }
    ici il faut demander a l'utilisateur de rentrer un nombre. ce qui est fait avec scanf, %d car la valeur sera rangé à l'adresse fahr ( me demande pas, scanf s'utilise comme ca).
    Apparament tu confond %d et %c:
    %d c'est pur un entier, %c c'est pur un caractère, et %f un flotant.
    Sinon le fait de metre en couleur y a plus besoin !
    et n'oublie pas le return(0); dans ton main.

    Si tu veux t'entrainer, code une calculatrice, un programme qui calcul le factoriel d'un nombre, a puissence b, etc ...

  5. #5
    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 jack_x4
    Bonjour, je me suis permi de remanier le code, tu m'en veux pas j'éspère.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    main()
    {
    	int fahr;
    	float celsius;
     
    	printf("Entrer une temp\x82rature en Fahrenheit que vous voulez convertir en celsius\n\n");
     
    	scanf("%d",&fahr);
    Savoir utiliser correctement scanf(), c'est un métier...

    http://xrenault.developpez.com/tutoriels/c/scanf/

    Sinon, on préfère une solution à base de fgets() + strtol(), c'est nettement plus facile à mettre en oeuvre correctement.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    heuuuu ! Je dois le prendre comment ??? J'ai aussi fais une erreur ?

  7. #7
    Membre averti
    Homme Profil pro
    Dev/Adm Sys/Réseau
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Dev/Adm Sys/Réseau

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Par défaut
    Bonjour, je me suis permi de remanier le code, tu m'en veux pas j'éspère.
    Du tout au contraire

    En faites je penser pouvoir faire celà avec getchar alors qu'il fallait utiliser scanf

    Merci pour vos rectifications

  8. #8
    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 jack_x4
    heuuuu ! Je dois le prendre comment ??? J'ai aussi fais une erreur ?
    Disons qu'il manque les trois-quart du code pour faire une saisie claire avec scanf()...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    il est vrai qu'il faut tester ce qui est rentré dans le scanf, et prévoir de vider la pille si c'est incorecte,puis relencer une saisie, car sinon le programme bug ! et tourne en boucle.

  10. #10
    Membre averti
    Homme Profil pro
    Dev/Adm Sys/Réseau
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Dev/Adm Sys/Réseau

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Par défaut
    C'est moins une horreur maintenant?

    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
    #include <stdio.h>
    #include <windows.h>
    #include "econio.h"
     
    main()
    {
    	int choix;
    	printf("\nEntrer 1 pour la convertion Celsius->Fahrenheit et 2 pour Fahrenheit->Celsius\n\nChoix: ");
     
    	scanf("%d",&choix);
     
    	if (choix==1)
    	{
    		float fahr;
    		int celsius;
    		system("cls");
    		printf("\nEntrer une temp\x82rature en Celsius que vous voulez convertir en Fahrenheit\n\n");
     
    		scanf("%d",&celsius);
     
    		fahr=celsius*1.8+32;
    		system("cls");
    		printf("\n %d degr\x82(s) Celsius est \x82gale \x85 %3.1f degr\x82(s) Fahrenheit\n\n", celsius, fahr);
     
    		printf("Appyuer sur une touche pour quitter");
     
    		getch();
    	}
    	else if (choix==2)
    	{
     
    		int fahr;
    		float celsius;
    		system("cls");
    		printf("\nEntrer une temp\x82rature en Fahrenheit que vous voulez convertir en celsius\n\n");
     
    		scanf("%d",&fahr);
     
    		celsius=(5.0/9.0)*(fahr-32.0);
    		system("cls");
    		printf("\n %d degr\x82(s) Fahrenheit est \x82gale \x85 %3.1f degr\x82(s) Celsius\n\n", fahr, celsius);
     
    		printf("Appyuer sur une touche pour quitter");
     
    		getch();
    	}
    	else
    	{
    		system("cls");
    		printf("\nLe choix est incorrect");
    		getch();
    		return(0);
    	}
    }

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    tu te la pètes toi dit donc

    Apprend lui plutôt a faire un switch car les if partout c'est pas du propre ! et fait un appel de fonction pour éviter d'écrire les même choses dans chaque if !
    Peace and Love hein !

  12. #12
    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 scottynou
    C'est moins une horreur maintenant?
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:3:20: econio.h: No such file or directory
    main.c:5: warning: return type defaults to `int'
    main.c:5: warning: function declaration isn't a prototype
    main.c: In function `main':
    main.c:24: warning: implicit declaration of function `getch'
    main.c:49: warning: control reaches end of non-void function
    Process terminated with status 1 (0 minutes, 1 seconds)
    1 errors, 4 warnings
    Je serais toi, je commencerais par apprendre le C standard. Je ne sais pas ce qu'est ce "econio.h", mais je ne veux pas voir ça pour le moment. Idem pour getch(). Quand à <windows.h>, tu l'utiliseras quand tu seras grand... Pour le moment, tu n'en as pas besoin.

  13. #13
    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 jack_x4
    tu te la pètes toi dit donc

    Apprend lui plutôt a faire un switch car les if partout c'est pas du propre ! et fait un appel de fonction pour éviter d'écrire les même choses dans chaque if !
    Peace and Love hein !
    Irrelevent, Captain.

  14. #14
    Membre averti
    Homme Profil pro
    Dev/Adm Sys/Réseau
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Dev/Adm Sys/Réseau

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:3:20: econio.h: No such file or directory
    main.c:5: warning: return type defaults to `int'
    main.c:5: warning: function declaration isn't a prototype
    main.c: In function `main':
    main.c:24: warning: implicit declaration of function `getch'
    main.c:49: warning: control reaches end of non-void function
    Process terminated with status 1 (0 minutes, 1 seconds)
    1 errors, 4 warnings
    Je serais toi, je commencerais par apprendre le C standard. Je ne sais pas ce qu'est ce "econio.h", mais je ne veux pas voir ça pour le moment. Idem pour getch(). Quand à <windows.h>, tu l'utiliseras quand tu seras grand... Pour le moment, tu n'en as pas besoin.
    econio.h c'était pour colorer le texte de la console, windows.h pour pas avoir de warning avec system("cls");

    Pour ce qui est de tes warning je ne l'ai pas avec Visual Studio .NET 2003


    Citation Envoyé par jack_x4
    tu te la pètes toi dit donc
    Apprend lui plutôt a faire un switch car les if partout c'est pas du propre ! et fait un appel de fonction pour éviter d'écrire les même choses dans chaque if !
    Peace and Love hein !
    Je demandais juste si c'était moins pire qu'avant comme source, je n'ai nullement eu l'intention de ma la péter comme tu dis ^^

    Pour ce qui est switch et des fonctions ok je te proposerais mieux quand je saurais de quoi tu parle

  15. #15
    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 scottynou
    econio.h c'était pour colorer le texte de la console,
    Non standard et inutile pour le moment.
    windows.h pour pas avoir de warning avec system("cls");
    Non standard et inutile pour le moment.

    De toutes façons, pour system(), c'est <stdlib.h>
    Pour ce qui est de tes warning je ne l'ai pas avec Visual Studio .NET 2003
    Alors essaye un réglage de warnings de niveau 4, sinon utilise un meilleur compilateur...

    Code::Blocks utilise gcc (MinGW).

    Au fait, tu n'as toujours pas dit quel était ton livre...

  16. #16
    Membre averti
    Homme Profil pro
    Dev/Adm Sys/Réseau
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Dev/Adm Sys/Réseau

    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Au fait, tu n'as toujours pas dit quel était ton livre...
    Le language C norme ANSI 2nd édition

    frizou11 à raison surement une mauvaise interprétation de getchar par moi

  17. #17
    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 scottynou
    Le language C norme ANSI 2nd édition
    "langage"...

    Dans ce livre il n'est question ni de <windows.h>, ni de "econio.h". Alors STP, tiens en toi strictement à l'énoncé des exercices.

    D'autre part, ce livre est plus un livre de référence qu'un cours de C. En tout cas, ce n'est pas un cours pour débutant en informatique, et il faut bien connaitre son système (à l'époque, Unix...)

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

Discussions similaires

  1. requete, problème de débutant
    Par focus dans le forum Access
    Réponses: 4
    Dernier message: 16/02/2006, 05h51
  2. Problème de débutant dans une requête
    Par decour dans le forum Access
    Réponses: 7
    Dernier message: 14/10/2005, 14h17
  3. [C#][service windows] problème de débutant avec 1 timer
    Par Nycos62 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/10/2005, 11h22
  4. Réponses: 3
    Dernier message: 24/09/2005, 09h34
  5. [DB2] problèmes de débutant
    Par rémi_tounul dans le forum DB2
    Réponses: 4
    Dernier message: 21/04/2005, 17h08

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