Bonjour !
Je voudrais comparer deux chaines de caractère avec GTK+ . Mais , je ne sais pas comment faire . J'ai essayer strcmp , mais ca ne marche .
Si vous pouviez m'aider , je vous en serais reconnaissant .
Cordialement ,Arvel
.
Version imprimable
Bonjour !
Je voudrais comparer deux chaines de caractère avec GTK+ . Mais , je ne sais pas comment faire . J'ai essayer strcmp , mais ca ne marche .
Si vous pouviez m'aider , je vous en serais reconnaissant .
Cordialement ,Arvel
.
Salut et bienvenue sur les forums de developpez.com :P
Rien de tel avec la GLib (GTK+) mais cela devrait fonctionner avec strcmp ... Montre voir ton code !Citation:
Envoyé par Arvel
EntryPseudo et EntryPassword sont déclarées en global ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 void Validation(GtkWidget *Widget , gpointer data) { gchar pseudo; gchar pass; gchar verifpseudo = "Arvel"; gchar verifpass = "password"; pseudo = gtk_entry_get_text(GTK_ENTRY(EntryPseudo)); if(pseudo == verifpseudo) { pass = gtk_entry_get_text(GTK_ENTRY(EntryPassword)); if(pass == verifpass) { gtk_entry_set_text(GTK_ENTRY(EntryPseudo) , "Réussi"); } else gtk_main_quit(); } else gtk_main_quit(); }
Heu c'est moi que tu poses cette question ! C'est ton code, à toi de le savoir :cfou:Citation:
Envoyé par Arvel
S'ils le sont, il faut éviter, sauf si bien entendu c'est un simple programme de test mais sinon, il faut éviter autant que faire se peut. Un conseil, tu peux éventuellement (vu que cette fonction est apparement un callback d'un widget) mettre ces deux GtkEntry dans une structure puis passer l'adresse de cette structure lors de la connection du signal au widget (le dernier argument quoi) puis tu récupère un pointeur vers cette structure depuis le paramètre "data" !
Nop Nop Nop .
C'était pas une question . Mon doigt à du ripé du point au point d'interrogation .
Mais il n'y a rien pour comparer les 2 chaines en GTK ?
Ok au temps pour moi :lol:Citation:
Envoyé par Arvel
Bin non à priori non mais cela existe dans la bibliothèque standard ce qui est largement suffisant, tu inclus string.h et tu utilise strcmp, y'a rien d'autre à faire ! Est-ce que tu respecte au moin la casse de tes saisies par rapport à ce qui doit être comparé ?Citation:
Envoyé par Arvel
Il ne manquerait pas **tousse** quelques étoiles?Code:
1
2
3
4
5 gchar pseudo; gchar pass; gchar verifpseudo = "Arvel"; gchar verifpass = "password";
Voilà la comparaison reste à faire. Attention au fait que GTK+ fonctionne en UTF-8 en interne, donc convertir les chaînes locales avec g_locale_to_utf8() avant d'appliquer la fonction de comparaison UTF-8 qui va bien dont j'ai oublié le nom.
Code:
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 #include <gtk/gtk.h> void btn_clic(GtkWidget *w, GtkEntry *data) { gchar* verifpseudo = "Arvel"; const gchar* pseudo; pseudo = gtk_entry_get_text(data); g_print("%s %s\n", pseudo, verifpseudo); } int main (int argc, char **argv) { GtkWidget *fen, *box, *bton, *entry; gtk_init (&argc, &argv); fen = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (fen), "destroy",G_CALLBACK (gtk_main_quit), NULL); gtk_container_set_border_width (GTK_CONTAINER (fen), 10); box = gtk_vbox_new (FALSE, 5); gtk_container_add (GTK_CONTAINER (fen), box); entry = gtk_entry_new (); gtk_entry_set_max_length (GTK_ENTRY (entry), 50); gtk_entry_set_text (GTK_ENTRY (entry), "hello"); gtk_box_pack_start (GTK_BOX (box), entry, TRUE, TRUE, 5); bton = gtk_button_new_with_label ("comparer"); g_signal_connect (G_OBJECT (bton), "clicked", G_CALLBACK (btn_clic), (GtkEntry*)entry); gtk_box_pack_start (GTK_BOX (box), bton, TRUE, TRUE, 5); gtk_widget_show_all (fen); gtk_main (); return 0; }
voila un lien qui peut servir http://www.ai.univ-paris8.fr/~jalb/langimp/chaine2.html
tu peux utiliser strcmp comme ça :
a+Code:
1
2
3
4 if(strcmp(chaine1 , chiane2 ) ==0)//si strcmp retourn 0 alors les deux chaîne sont identique. { code }
Oui en fait j'avais pas fait attention à ca mais regarde en rouge ... ce n'est pas comme ca qu'on test l'égalité entre deux chaînes !Citation:
Envoyé par Arvel
avant quand je comparais deux chaînes je faisait comme if(chaine1==chine2)
mais ca marche pas tout le temps prenons un exemple:
voila un code qui devrait marcher mais qui plante et avec :if(strcmp(c1 , c2)==0) il marche.
Code:
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> #include <stdlib.h> int main() { char *chaine1[100]; char chaine2[]="texte"; chaine1[0]="texte"; if(chaine1[0] == chaine2) printf(" ca marche "); return 0; }
et voila un qui marche avec strcmp
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *chaine1[100]; char chaine2[]="texte"; chaine1[0]="texte"; if(strcmp (chaine1[0], chaine2 ) == 0) printf(" ca marche "); return 0; }
a+
Si ca marche (ton code 1) c'est un comportement indéterminé car ce n'est pas comme ca qu'on compare des chaînes de caractères, pour comparer deux données numérique là ok mais c'est tout ! Pour des chaînes il y a strcmp entre autres !
c'est ca ce que je voulais dire, c'est le deuxième code qu'il faut utiliser pour la comparaison de deux chaînes, et pas le premier.