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 :

probleme de code simple


Sujet :

C

  1. #1
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut probleme de code simple
    Bonjour a tous,
    Je debute les cours C cette année et j'ai un peu de mal donc pendant les vacances je fais des exercices tirés du bouquin Langage C, Norme ANSI de Kernighan & Ritchie.
    Donc voila j'ai comme code ce qui suit, j'ai aucune erreur a la compilation ni warning (j'utilise dev c++) mais quand j'execute mon programme la fenetre se ferme et c'est tout!

    Si il y avait qq d'assez aimable pour m'expliquer le pourquoi.
    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
    #include <stdio.h>
     
     
    int conversion(int degreF, int degreC)
          {
          degreC=(5*(degreF-32))/9;
          }
     
    int main()
          {
          int fahr, celsius;
          celsius=0;
          printf("Saisissez la temperature en degres fahrenheit\n");
          scanf("%d", &fahr);            
          printf("%d", fahr);
     
          conversion(fahr, celsius);
     
          printf("La temperature en celsius est de %d\n",celsius);
          }

  2. #2
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut Re: probleme de code simple
    Bonjour,

    essaie un peu comme ceci:

    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>
     
     
    int conversion(int degreF, int degreC)
          {
          degreC=(5*(degreF-32))/9;
          }
     
    int main()
          {
          int fahr, celsius;
          celsius=0;
          printf("Saisissez la temperature en degres fahrenheit\n");
          scanf("%d", &fahr);            
          printf("%d", fahr);
     
          conversion(fahr, celsius);
     
          printf("La temperature en celsius est de %d\n",celsius);
          /* pour Dev-C++ uniquement */
          system ("pause"); 
          }

  3. #3
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    en effet, avec dev c++, ton résultat s'affiche puis disparait. mais cela va si vite que tu ne le vois pas.

    Bon courage

  4. #4
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    c'est pour ça que tu peux utiliser

    system ("pause");


    mais seulement ds dev-c++

  5. #5
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    ok mais maintenant j'ai un probleme c'est ma fonction conversion qui ne fonctionne pas!
    J'ai inclu un :
    return(degreC)
    mais toujours rien ma variable celsius reste a 0...

  6. #6
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    J'ai modifié mon code pour utiliser des float :
    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
     #include <stdio.h>
     
    float conversion(float degreF, float degreC)
          {
          degreC=(5*(degreF-32))/9;
          printf("temperature en degres %f \n",degreC);
          }
     
    float main()
          {
          float fahr, celsius;
          celsius=0.0;
          printf("Saisissez la temperature en degres fahrenheit\n");
          scanf("%f", &fahr);                  
     
     
          printf("La temperature en celsius est de %f\n",conversion(fahr,celsius));
          system("pause");
          }
    Si vous suivez bien le code j'ai 2 affichages de la temperature en degres celsius. Le premier fonctionne sans aucun problèmes (celui qui est fait dans ma fonction) cependant le second m'affiche que des conneries! quelqu'un sait pourquoi?

    PS: merci bien pour le system"pause"

  7. #7
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Je te conseille de bien lire ton livre de C. Tu y apprendras que lorsqu'une variable est passée à une fonction, on passe en fait une copie qui est locale à la fonction. Donc tu modifies ta copie, et pas la variable originale. Pour modifier une variable, il faut passer un pointeur vers cette variable.

    Pour être cohérent, ton code devrait plutôt ressembler à cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    double conversion(double degre_f)
    {
       double degre_c = ....
       return degre_c;
    }
    et faire dans le main():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    double degre_f = 42.0;
    double degre_c;
     
    degre_c = conversion(degre_f);

  8. #8
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    float conversion(float degreF, float degreC) 
          { 
          degreC=(5*(degreF-32))/9; 
          printf("temperature en degres %f \n",degreC); 
          }
    Tu as oublié de renvoyer la valeur. D'autre part, degreC n'est pas un paramètre de la fonction : elle n'a pas à connaître la valeur de degreC pour travailler : la preuve est que dès la première ligne tu écrases sa valeur . C'est une variable locale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    float conversion(float degreF) 
          { 
          float degreC=(5*(degreF-32))/9; 
          printf("temperature en degres %f \n",degreC); 
          return degreC ;
          }
    ou encore, sans l'affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float conversion(float degreF) 
          { 
          return 5*(degreF-32)/9;
          }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    float main() 
          { 
          float fahr, celsius; 
          celsius=0.0; 
          printf("Saisissez la temperature en degres fahrenheit\n"); 
          scanf("%f", &fahr);                  
     
     
          printf("La temperature en celsius est de %f\n",conversion(fahr,celsius)); 
          system("pause"); 
          }
    main doit renvoyer un int et celsius est inutile dans l'appel à conversion

  9. #9
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    rebonjour,

    je pense qu'il te manque le return degreC, car sinon te fct conversion ne te renvoi rien
    cela devrait résoudre ton problème

    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
    #include <stdio.h>
     
    float conversion(float degreF, float degreC)
          {
          degreC=(5*(degreF-32))/9;
          printf("temperature en degres %f \n",degreC);
          /* sinon ta fonction ne renvoie rien */
          return degreC;
          }
     
    float main()
          {
          float fahr, celsius;
          celsius=0.0;
          printf("Saisissez la temperature en degres fahrenheit\n");
          scanf("%f", &fahr);                 
     
     
          printf("La temperature en celsius est de %f\n",conversion(fahr,celsius));
          system("pause");
          }

  10. #10
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par je®ome
    c'est pour ça que tu peux utiliser

    system ("pause");


    mais seulement ds dev-c++
    Pourquoi seulement avec dev-c++, je dirai seulement sous Windows.
    La commande system( declaré dans stdlib.h) execute la commande indiqué entre la parenthese, c'est tout.
    Autrement dit sous n'importe quel EDI sous Windows, cela doit fonctionner

  11. #11
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Merci a tous, c'etait bien ça il manquait un return!
    Diogene merci pour les optimisations que tu m'a donné c'est tres cool de ta part!

    La commande system( declaré dans stdlib.h) execute la commande indiqué entre la parenthese, c'est tout.
    Je declare pas cette librairie mais la commande systeme fonctionne, c'est normal?

    Sinon j'ai un autre problème j'essaie d'ecrire un programme qui affiche la valeur de EOF, mais cela ne fonctionne pas!

    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
    #include <stdio.h>
     
    int main()
        {
        char N,c;
        printf("Saisissez votre phrase : \n");
        while ((c=getchar())!=EOF)
            {
            ;       
            }
     
        if((c=getchar())==EOF)
            {
            N=EOF;
            printf("Valeur de EOF : %c \n",N);
            }
        system("pause");
        }
    Je pense que c'est la 2eme partie qui va pas car si je mets un putchar(c) dans le while je recupere bien la chaine que j'ai rentré en saisie.

  12. #12
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Je suis désolé mais je ne comprends pas tout à fait: que souhaites-tu faire avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if((c=getchar())==EOF)
    ?

  13. #13
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Eh bien, en fait, avec ce programme on ignore la chaine de caractere que l'on rentre et le
    je pensais m'en servir pour recuperer la valeur de EOF...

    Sinon j'ai modifié mon code pour recupérer la valeur de chaque caractere de la phrase. Ce programme fonctionne pour tous les caractères même le \n mais pas avec le EOF!

    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
    #include <stdio.h>
     
    int val()
        {
        char c;
        while((c=getchar())!=EOF)
            {
            printf("Valeur du caractere : %d \n",c);       
            }
        if((c=getchar())==EOF)
            {
            printf("Valeur de EOF : %d \n",c);
            }  
        }
     
    int main()
        {  
        printf("Saisissez votre phrase : \n");
        val();
        //system("pause");
        }

  14. #14
    kap
    kap est déconnecté
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 188
    Points : 72
    Points
    72
    Par défaut
    euh la valeur de eof c'est 0 ou 1 mais c'est pas un charactère
    http://www.hmug.org/man/n/eof.php

  15. #15
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        char c; 
        while((c=getchar())!=EOF)
    Déclare c comme int si tu veux pouvoir tester EOF

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par BFH
    Sinon j'ai un autre problème j'essaie d'ecrire un programme qui affiche la valeur de EOF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <stdio.h>
    int main(int argc, char *argv[]) {
    	printf("EOF == %i\n",EOF);
    	return 0;
    }

  17. #17
    Membre régulier Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Points : 76
    Points
    76
    Par défaut
    Juste une petite remarque, je débute également en C.
    Si le code ne contient pas la fonction:
    system ("pause");
    et que vous ne pouvez pas modifier le code, si vous ne possédez que l'exécutable par exemple; il suffit de l'exécuter en ligne de commande et là la fenêtre restera bien ouverte.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Skyrunner
    Citation Envoyé par je®ome
    c'est pour ça que tu peux utiliser
    system ("pause");
    mais seulement ds dev-c++
    Pourquoi seulement avec dev-c++, je dirai seulement sous Windows.
    La commande system( declaré dans stdlib.h) execute la commande indiqué entre la parenthese, c'est tout.
    Autrement dit sous n'importe quel EDI sous Windows, cela doit fonctionner
    Bien sûr que ça fonctionne, mais ce n'est nécessaire ni sous CPPBuilder, ni sous Visual Studio, ni sous Mingw Studio, ni sous Code::Blocks. C'est clairement un défaut de Dev-C++...

  19. #19
    BFH
    BFH est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Ok merci je vais tester ça et je vous tiendrais au courant...

Discussions similaires

  1. probleme de code formulaire
    Par bachilbouzouk dans le forum ASP
    Réponses: 45
    Dernier message: 13/04/2005, 10h01
  2. Explication de code simple
    Par Clad3 dans le forum OpenGL
    Réponses: 3
    Dernier message: 20/03/2005, 11h31
  3. [debutant] probleme de code :-(
    Par flogreg dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 16/08/2004, 18h20
  4. Réponses: 17
    Dernier message: 16/07/2004, 12h19
  5. Réponses: 2
    Dernier message: 08/04/2004, 11h11

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