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

GTK+ avec C & C++ Discussion :

Calcul Avec Gtk


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut Calcul Avec Gtk
    Bonjour à tous,
    est-il possible d'effectuer des calculs simple avec GTK.
    Par exemple :

    TAPEZ VOTRE 1er NOMBRE :
    TAPEZ VOTRE 2ème NOMBRE :

    VOILA L'ADDITION DE VOTRE SAISIE :

    merci

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par LE CORRE
    Bonjour à tous,
    est-il possible d'effectuer des calculs simple avec GTK.
    Par exemple :

    TAPEZ VOTRE 1er NOMBRE :
    TAPEZ VOTRE 2ème NOMBRE :

    VOILA L'ADDITION DE VOTRE SAISIE :

    merci
    Bin disons que c'est possible en C tout simplement.

    GTK+ permet avant tout l'affichage graphiques de contrôles utilisateurs, ce que tu veux faire doit être fait sur la console ou en mode graphique ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Le programme se fait en mode graphique.
    Je pensais à cette procédure :

    Saisie des nombres par l'utilisateur en interface GTK (GTKEntry)
    Calcul par le langage C
    Affichage du résultat en interface GTK

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par LE CORRE
    Le programme se fait en mode graphique.
    Je pensais à cette procédure :

    Saisie des nombres par l'utilisateur en interface GTK (GTKEntry)
    Calcul par le langage C
    Affichage du résultat en interface GTK
    Oui biensur, tu peux même le faire en une seule fenêtre, il te suffit simplement d'avoir:
    • 3 GtkEntry
    • 1 GtkButton

    Je ne vois pas vraiment où se situe ton problème, dans les 2 premiers GtkEntry tu entres des valeurs à calculer, le GtkButton te permet de faire le calcul et le 3ème GtkEntry affiche le resultat !

    Tu peux facilement convertir les chaînes contenues dans les 2 premiers GtkEntry avec la fonction standard strtol par exemple pour des entiers.
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Bon eh bien je m'y mets et j'applique tes conseils

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Salut,

    Dans le programme je butes sur la possibilité

    1°)de valider l'enregistrement dans le GTKEntry par la touche entrée du clavier (plutot que d'avoir un bouton VALIDEZ à chaque enregistgrement)


    2°) de passer d'un champs de saisie à un autre.

    Sais tu comment faire?

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par LE CORRE
    1°)de valider l'enregistrement dans le GTKEntry par la touche entrée du clavier (plutot que d'avoir un bouton VALIDEZ à chaque enregistgrement)
    Pour ca tu peux gérer le signal activate de ton GtkEntry !

    Citation Envoyé par LE CORRE
    2°) de passer d'un champs de saisie à un autre.
    Tu peux utiliser la fonction gtk_widget_grab_focus en lui donnant en paramètre le widget vers lequel tu veux passer le focus
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Salut, j'ai essayé la validation de la saisie par la touche entrée ("activate")mais j'échoue.

    1er nombre = pEntry1
    2ème nombre = pEntry2

    j'ai fait ce code

    pLabel = gtk_label_new("VOTRE 1er NOMBRE");
    gtk_box_pack_start(GTK_BOX(pVBoxFrame), pLabel, TRUE, FALSE, 0);
    pEntry1 = gtk_entry_new();
    gtk_box_pack_start(GTK_BOX(pVBoxFrame), pEntry1,TRUE, FALSE, 0);

    g_signal_connect(G_OBJECT(pEntry1), "activate", G_CALLBACK( pEntry2 ), NULL);


    mais ça ne fonctionne pas .

  9. #9
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Ca fonctionnera certainement moins bien si tu met effectivement en tant que fonction callback ton pEntry2 ! Je pensais avoir était assez clair pourtant

    Bon, je suis très généreux donc voici un code d'exemple qui fonctionne, pose des questions si tu ne comprend 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
    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
    #include <gtk/gtk.h>
     
     
    void cb_activate (GtkEntry * p_wid, gpointer p_data)
    {
       GtkEntry * p_entry = (GtkEntry *) p_data;
     
       g_return_if_fail (p_wid != NULL);
       g_return_if_fail (p_data != NULL);
     
       gtk_widget_grab_focus (GTK_WIDGET (p_entry));
    }
     
     
    int main (int argc, char ** argv)
    {
       GtkWidget * p_win    = NULL;
       GtkWidget * p_vbox   = NULL;
       GtkWidget * p_entry  [2];
     
     
       gtk_init (& argc, & argv);
     
     
       p_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_title (GTK_WINDOW (p_win), "GtkEntry...");
       gtk_container_set_border_width (GTK_CONTAINER (p_win), 5);
     
       g_signal_connect (
          G_OBJECT (p_win), "destroy",
          G_CALLBACK (gtk_main_quit), NULL
       );
     
     
       p_vbox = gtk_vbox_new (TRUE, 5);
       gtk_container_add (GTK_CONTAINER (p_win), p_vbox);
     
     
       p_entry[0] = gtk_entry_new ();
       p_entry[1] = gtk_entry_new ();
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[0], TRUE, TRUE, 5);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[1], TRUE, TRUE, 5);
     
       g_signal_connect (
          G_OBJECT (p_entry[0]), "activate",
          G_CALLBACK (cb_activate), (GtkEntry *) p_entry[1]
       );
     
     
       gtk_widget_show_all (p_win);
       gtk_main ();
     
     
       return 0;
    }

    PS :
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    OH LA LA?j'étais complètement dans les choux !!!
    j'épluche le code dès maintenant,
    encore une fois merçi

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Salut,
    j'ai travaillé toute la soirée sur le code mais je n'arrive pas à récupérer la chaine du GTKEntry saisie.

    j'ai modifié mon code d'origine C

    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
    long resultat = 0, nombre1 = 0, nombre2 = 0;
      long resultat = strtol(chaine‚ NULL10); 
     
     
     
     
    printf("TAPEZ VOTRE 1er NOMBRE : ");
      scanf("%ld", &nombre1);
      printf(" TAPEZ VOTRE 2ème NOMBRE :");
      scanf("%ld", &nombre2);
     
     
      resultat = nombre1 + nombre2;
     
     
      printf ("%ld + %ld = %ld\n", nombre1, nombre2, resultat);
     
      system("PAUSE");
    j'ai pourtant inclue le "strtol" comme indiqué ?

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Le mieux serait que tu me donnes ton code complet et compilable pour que je puisse t'aider le mieux possible parce que là, je peut pas faire grand chose avec le peu que tu me donnes, il me faut ton vrai code !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Salut et encore merci de ne pas me lacher.

    d'un coté j'avais mon code C pour le calcul qui fonctionne bien, de l'autre j'avais mon code GTK+ d'interface qui es bon, par contre quand je fusionne les deux ça ne fonctionne pas ?

    voila le code final

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
     
     
    void cb_activate (GtkEntry * p_wid, gpointer p_data)
    {
       GtkEntry * p_entry = (GtkEntry *) p_data;
     
       g_return_if_fail (p_wid != NULL);
       g_return_if_fail (p_data != NULL);
     
       gtk_widget_grab_focus (GTK_WIDGET (p_entry));
    }
     
     
    int main (int argc, char ** argv)
    {
       /*VARIABLES DE CALCUL*/
       long resultat = 0, resultat = nombre1 + nombre2;nombre1 = 0, nombre2 = 0;
       long resultat = strtol(chaine‚ NULL10); 
     
       /*VARIABLES D'ENVIRONNEMENT*/
       GtkWidget * p_win    = NULL;
       GtkWidget * p_vbox   = NULL;
       GtkWidget * p_entry [3];
       GtkWidget * p_label [3];
       GtkWidget * p_button [1];
     
       gtk_init (& argc, & argv);
     
     
       p_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_title (GTK_WINDOW (p_win), "GtkEntry...");
       gtk_container_set_border_width (GTK_CONTAINER (p_win), 5);
     
       g_signal_connect (
          G_OBJECT (p_win), "destroy",
          G_CALLBACK (gtk_main_quit), NULL
       );
     
     
       p_vbox = gtk_vbox_new (TRUE, 5);
       gtk_container_add (GTK_CONTAINER (p_win), p_vbox);
     
     
       /*MISE EN PLACE DES ELEMENTS DE LA FENETRE*/
     
       p_entry[0] = gtk_entry_new ();
       p_entry[1] = gtk_entry_new ();
       p_entry[2] = gtk_entry_new ();
       p_label[0] = gtk_label_new("TAPEZ VOTRE 1er NOMBRE ");
       p_label[1]  = gtk_label_new("TAPEZ VOTRE 2eme NOMBRE ");
       p_label[2] = gtk_label_new("RESULTAT DE L'ADDITION =");
       p_button[0] = gtk_button_new_with_label("VALIDATION");
     
     
       gtk_box_pack_start(GTK_BOX(p_vbox), p_label[0], TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[0], TRUE, TRUE, 5);
       gtk_box_pack_start(GTK_BOX(p_vbox), p_label[1], TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[1], TRUE, TRUE, 5);
       gtk_box_pack_start(GTK_BOX(p_vbox), p_button[0], TRUE, TRUE, 0);
       gtk_box_pack_start(GTK_BOX(p_vbox), p_label[2], TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[2], TRUE, TRUE, 5);
     
       /*CALCUL DU RESULTAT*/
       g_signal_connect (
          G_OBJECT (p_entry[0]), "activate",
          G_CALLBACK (cb_activate), (GtkEntry *) p_entry[1]
       );
     
     
       resultat = nombre1 + nombre2;
     
       gtk_widget_show_all (p_win);
       gtk_main ();
     
     
       return 0;
    }

  14. #14
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Pourquoi ca fonctionne pas .... tu as fait n'importe quoi, voilà tout, il suffit pas de reprendre mot pour mot ce que j'ai fait et le mélanger avec ton code non GTK+ ... un programme ca se réfléchi, même si c'est un simple exercice de style !

    Voyons ce qui ne va pas (pour faire court):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long resultat = 0, resultat = nombre1 + nombre2;nombre1 = 0, nombre2 = 0;
    Ca veut absolument rien dire ! Ici tu déclare une variable puis je ne sais pas quel miracle tu veux faire une affectation avec deux autre variables même pas déclarées et initialisées ... il est urgent pour toi de réviser sérieusement ton C !

    Ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long resultat = strtol(chaine‚ NULL10);
    Ca reste plausible dans la mesure où la variable chaine existe et est initialisée, ce qui n'est nullement le cas ici !

    Continuons ... Pour faire le calcul il faut résonner en programmation événémentielle ce qui implique que toutes les conversions ainsi que le calcul et l'affichage du résultat doit se faire par le biais d'un callback que tu aura lié à ton bouton ... sinon le bouton je n'en vois pas grand intérêt ici !

    Donc si on résume, tes pointeurs sur tes widgets, mets-les à l'extérieur du main (pour le moment) pour que tu puisses y avoir accès depuis n'importe où dans ton module de compilation !

    Ensuite, vu qu'on ne peut passer qu'un seul paramètre à un callback, il deviens presque naturel de créer une structure qui contiendra toutes les données numériques.

    J'arrête ici car j'était déjà assez surpris par ton code... Voici le code remanié mais qui reste grandement améliorable:
    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
    109
    110
    111
    112
    113
    114
    115
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <gtk/gtk.h>
     
     
    /*VARIABLES D'ENVIRONNEMENT*/
    GtkWidget * p_win    = NULL;
    GtkWidget * p_vbox   = NULL;
    GtkWidget * p_entry [3];
    GtkWidget * p_label [3];
    GtkWidget * p_button [1];
     
     
    typedef struct
    {
       long op1;
       long op2;
     
       long resultat;
    }
    operandes;
     
     
    void cb_activate (GtkEntry * p_wid, gpointer p_data)
    {
       GtkEntry * p_entry = (GtkEntry *) p_data;
     
       g_return_if_fail (p_wid != NULL);
       g_return_if_fail (p_data != NULL);
     
       gtk_widget_grab_focus (GTK_WIDGET (p_entry));
    }
     
     
    void cb_clicked (GtkButton * p_wid, gpointer p_data)
    {
       char buff [20];
       operandes * op = NULL;
     
       g_return_if_fail (p_wid != NULL);
       g_return_if_fail (p_data != NULL);
     
       op = (operandes *) p_data;
       op->op1 = strtol (gtk_entry_get_text (GTK_ENTRY (p_entry[0])), NULL, 10);
       op->op2 = strtol (gtk_entry_get_text (GTK_ENTRY (p_entry[1])), NULL, 10);
       op->resultat = op->op1 + op->op2;
     
       sprintf (buff, "%ld\n", op->resultat);
       buff [strlen (buff) - 1] = '\0';
     
       gtk_entry_set_text (GTK_ENTRY (p_entry[2]), buff);
    }
     
     
    int main (int argc, char ** argv)
    {
       /*VARIABLES DE CALCUL*/
       operandes op;
     
     
       gtk_init (& argc, & argv);
     
     
       p_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_title (GTK_WINDOW (p_win), "GtkEntry...");
       gtk_container_set_border_width (GTK_CONTAINER (p_win), 5);
     
       g_signal_connect (
          G_OBJECT (p_win), "destroy",
          G_CALLBACK (gtk_main_quit), NULL
       );
     
     
       p_vbox = gtk_vbox_new (TRUE, 5);
       gtk_container_add (GTK_CONTAINER (p_win), p_vbox);
     
     
       /*MISE EN PLACE DES ELEMENTS DE LA FENETRE*/
     
       p_entry[0] = gtk_entry_new ();
       p_entry[1] = gtk_entry_new ();
       p_entry[2] = gtk_entry_new ();
       p_label[0] = gtk_label_new("TAPEZ VOTRE 1er NOMBRE ");
       p_label[1]  = gtk_label_new("TAPEZ VOTRE 2eme NOMBRE ");
       p_label[2] = gtk_label_new("RESULTAT DE L'ADDITION =");
       p_button[0] = gtk_button_new_with_label("VALIDATION");
     
     
       gtk_box_pack_start(GTK_BOX(p_vbox), p_label[0], TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[0], TRUE, TRUE, 5);
       gtk_box_pack_start(GTK_BOX(p_vbox), p_label[1], TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[1], TRUE, TRUE, 5);
       gtk_box_pack_start(GTK_BOX(p_vbox), p_button[0], TRUE, TRUE, 0);
       gtk_box_pack_start(GTK_BOX(p_vbox), p_label[2], TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[2], TRUE, TRUE, 5);
     
     
       g_signal_connect (
          G_OBJECT (p_button[0]), "clicked",
          G_CALLBACK (cb_clicked), (void *) &op
       );
     
       g_signal_connect (
          G_OBJECT (p_entry[0]), "activate",
          G_CALLBACK (cb_activate), (GtkEntry *) p_entry[1]
       );
     
     
       gtk_widget_show_all (p_win);
       gtk_main ();
     
     
       return 0;
    }
    Pose des questions sur ce que tu ne comprend pas !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Merci pour la correction.

    Et si on veut faire des calculs avec des nombres avec 2 chiffres après la virgule, est ce que strtol sera approprié à Single.

    P.S ils sont pas mal tes Smileys, j'espère seulement éviter le Smiley Fouetteur pour la réponse.

  16. #16
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par LE CORRE
    Et si on veut faire des calculs avec des nombres avec 2 chiffres après la virgule, est ce que strtol sera approprié à Single.
    Je ne sais pas où tu as cherché le type Single mais je peut t'assurer que le C c'est pas du VB, ca n'existe pas

    Pour les chiffres à virgules flottantes: strtod, strtof et strtold
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Oh la,
    je prends tout de suite une feuille de papier et mon stylo qui ne possède pas l'option "copier-coller" et j'écris 100 fois ;

    Je ne dois pas confondre Visual Basic et Langage C, excuse moi Franck.

    Est ce que strtol sera approprié à Single., je voulais dire Double.

  18. #18
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par LE CORRE
    Oh la,
    je prends tout de suite une feuille de papier et mon stylo qui ne possède pas l'option "copier-coller" et j'écris 100 fois ;

    Je ne dois pas confondre Visual Basic et Langage C, excuse moi Franck.

    Est ce que strtol sera approprié à Single., je voulais dire Double.
    Bin strtod (voir les pages man)
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Bonjour,

    Je comprends pas j'ai mis les changements indiqués et ça ne prend toujours pas les chiffres après la virgulle pour l'opération :

    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <gtk/gtk.h>
     
     
    /*VARIABLES D'ENVIRONNEMENT*/
    GtkWidget * p_win    = NULL;
    GtkWidget * p_vbox   = NULL;
    GtkWidget * p_entry [3];
    GtkWidget * p_label [3];
    GtkWidget * p_button [1];
     
     
    typedef struct
    {
     
       double op1;
       double op2;
       double resultat;
     
     
    }
    operandes;
     
     
    void cb_activate (GtkEntry * p_wid, gpointer p_data)
    {
       GtkEntry * p_entry = (GtkEntry *) p_data;
     
       g_return_if_fail (p_wid != NULL);
       g_return_if_fail (p_data != NULL);
     
       gtk_widget_grab_focus (GTK_WIDGET (p_entry));
    }
     
     
    void cb_clicked (GtkButton * p_wid, gpointer p_data)
    {
       char buff [20];
       operandes * op = NULL;
     
       g_return_if_fail (p_wid != NULL);
       g_return_if_fail (p_data != NULL);
     
       op = (operandes *) p_data;
       op->op1 = strtod (gtk_entry_get_text (GTK_ENTRY (p_entry[0])), NULL);
       op->op2 = strtod (gtk_entry_get_text (GTK_ENTRY (p_entry[1])), NULL);
       op->resultat = op->op1 + op->op2;
     
       sprintf (buff, "%lf\n", op->resultat);
       buff [strlen (buff) - 1] = '\0';
     
       gtk_entry_set_text (GTK_ENTRY (p_entry[2]), buff);
    }
     
     
    int main (int argc, char ** argv)
    {
       /*VARIABLES DE CALCUL*/
       operandes op;
     
     
       gtk_init (& argc, & argv);
     
     
       p_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
       gtk_window_set_title (GTK_WINDOW (p_win), "GtkEntry...");
       gtk_container_set_border_width (GTK_CONTAINER (p_win), 5);
     
       g_signal_connect (
          G_OBJECT (p_win), "destroy",
          G_CALLBACK (gtk_main_quit), NULL
       );
     
     
       p_vbox = gtk_vbox_new (TRUE, 5);
       gtk_container_add (GTK_CONTAINER (p_win), p_vbox);
     
     
       /*MISE EN PLACE DES ELEMENTS DE LA FENETRE*/
     
       p_entry[0] = gtk_entry_new ();
       p_entry[1] = gtk_entry_new ();
       p_entry[2] = gtk_entry_new ();
       p_label[0] = gtk_label_new("TAPEZ VOTRE 1er NOMBRE ");
       p_label[1]  = gtk_label_new("TAPEZ VOTRE 2eme NOMBRE ");
       p_label[2] = gtk_label_new("RESULTAT DE L'ADDITION =");
       p_button[0] = gtk_button_new_with_label("VALIDATION");
     
     
       gtk_box_pack_start(GTK_BOX(p_vbox), p_label[0], TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[0], TRUE, TRUE, 5);
       gtk_box_pack_start(GTK_BOX(p_vbox), p_label[1], TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[1], TRUE, TRUE, 5);
       gtk_box_pack_start(GTK_BOX(p_vbox), p_button[0], TRUE, TRUE, 0);
       gtk_box_pack_start(GTK_BOX(p_vbox), p_label[2], TRUE, FALSE, 0);
       gtk_box_pack_start (GTK_BOX (p_vbox), p_entry[2], TRUE, TRUE, 5);
     
     
       g_signal_connect (
          G_OBJECT (p_button[0]), "clicked",
          G_CALLBACK (cb_clicked), (void *) &op
       );
     
       g_signal_connect (
          G_OBJECT (p_entry[0]), "activate",
          G_CALLBACK (cb_activate), (GtkEntry *) p_entry[1]
       );
     
     
       gtk_widget_show_all (p_win);
       gtk_main ();
     
     
       return 0;
    }
    j'ai pourtant mis les strtod,double, et "%lf\n" ?

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 27
    Par défaut
    Salut,


    suite à une vérification du code, j'ai modifié la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf (buff, "%lf\n", op->resultat);
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf (buff, "%.3f", op->resultat);
    et là j'obtiens le nombre avec 2 chiffres après la virgule dans le GTKEntry comme souhaité, sauf qu'il ne prend toujours pas en compte les décimaux pour le calcul ?

Discussions similaires

  1. [Débutant] Calculer en parallèle avec GTK
    Par gedeon555 dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 05/11/2007, 00h19
  2. Réponses: 2
    Dernier message: 22/03/2004, 10h50
  3. [GTK]installer Dev-C++ avec gtk 1.2 ...
    Par vbcasimir dans le forum Dev-C++
    Réponses: 2
    Dernier message: 02/02/2004, 13h34

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