Problemm mit GTK+ Entry abfrage

Volto

Grünschnabel
Guten Tag ich bin Volto,
ich habe ein kleines Problem mit dem nach folgendem teil meines Programmes.
Code:
if((int)gtk_entry_get_text(GTK_ENTRY(entry)) == 1){
gtk_text_insert(GTK_TEXT(textframe), NULL, NULL, NULL, "Weiblich", -1);
}else if((int)gtk_entry_get_text(GTK_ENTRY(entry)) == 2){
gtk_text_insert(GTK_TEXT(textframe), NULL, NULL, NULL, "Maennlich", -1);
}
Das Problemm ist ich gebe in der Oberfläche die 1 für Weiblich oder die 2 für Männlich ein nur wird diese Abfrage nicht durchgeführ und mir fällt keine anderen möglichkeiten mehr ein wie ich diesen Fehler beheben kann.

Dieses Programm ist für Linux Programmiert worden mit hilfe der GTK libs.
Hier der komplette Code meines Programmes fals der Fehler an anderer Stelle zu suchen ist.
Code:
header.h
#include <iostream>
#include <fstream>
#include <string>
#include <gtk/gtk.h>

struct player
{
	char *name;
	int gender;
	int kapitel;
};

struct kapitel
{
	int kapitel1;
	int kapitel2;
	int kapitel3;
};

source.cpp
#include "header.h"

using namespace std;

int savegame = 0;
player playerset;
GtkWidget *fenster;
GtkWidget *textframe, *entry;
GtkWidget *masterbox, *vbox;
GtkWidget *button;

void gamestart(){
	if(!playerset.name){
		playerset.name = gtk_entry_get_text(GTK_ENTRY(entry));
		gtk_text_insert(GTK_TEXT(textframe), NULL, NULL, NULL, playerset.name, -1);
		gtk_text_insert(GTK_TEXT(textframe), NULL, NULL, NULL, "\nBitte Waehle ein Geschlecht:\n  <1> Weiblich\n  <2> Maennlich\nAntwort: ", -1);
		gtk_entry_set_text(GTK_ENTRY(entry),"");
	}else if(((bool)playerset.name == TRUE)&&((bool)playerset.gender == FALSE)){
		if((int)gtk_entry_get_text(GTK_ENTRY(entry)) == 1){
			gtk_text_insert(GTK_TEXT(textframe), NULL, NULL, NULL, "Weiblich", -1);
		}else if((int)gtk_entry_get_text(GTK_ENTRY(entry)) == 2){
			gtk_text_insert(GTK_TEXT(textframe), NULL, NULL, NULL, "Maennlich", -1);
		}
		gtk_entry_set_text(GTK_ENTRY(entry),"");
		playerset.kapitel = 1;
	}else{
		cout << playerset.name << endl;
		cout << playerset.gender << endl;
		cout << playerset.kapitel << endl;
		switch((int)playerset.kapitel){
			case 1:
				gtk_text_insert(GTK_TEXT(textframe), NULL, NULL, NULL, "Kapitel: Das Erwachen\n", -1);
			break;
		}
	}
}

int main(int argc, char **argv)
{
	system("clear");
	gtk_init(&argc, &argv);

	fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	masterbox = gtk_vbox_new(FALSE,2);
	textframe = gtk_text_new(NULL, NULL);
	vbox = gtk_hbox_new(FALSE,2);
	button = gtk_button_new_with_label("   Weiter   ");
	entry = gtk_entry_new_with_max_length(12);

	ifstream loaddata;
	loaddata.open(".madigtos.sav", ios_base::in /*| ios_base::binary*/);
	cout << "Spielsystem geladen..." << endl;
	if(!loaddata){
		cout << "Daten nicht geladen..."<< endl;
		loaddata.close();
		gtk_text_insert(GTK_TEXT(textframe), NULL, NULL, NULL, "Willkommen im Spiel Madigtos\nBitte geben sie ihren Namen ein: ", -1);
	}
	else{
		loaddata.read((char*)&playerset, sizeof(playerset));
		loaddata.close();
		cout << "Spielspeicher wurde geladen..." << endl;
		gtk_text_insert(GTK_TEXT(textframe), NULL, NULL, NULL, "Madigtos\n", -1);
	}
	gtk_signal_connect(GTK_OBJECT(fenster), "destroy", GTK_SIGNAL_FUNC(gtk_main_quit),NULL);
	gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gamestart), NULL);
	gtk_widget_set_uposition(fenster,150,200);
	gtk_window_set_default_size(GTK_WINDOW(fenster),400,300);

	gtk_text_set_editable(GTK_TEXT(textframe), FALSE);
	gtk_text_set_word_wrap(GTK_TEXT(textframe), TRUE);
	gtk_text_set_line_wrap(GTK_TEXT(textframe), false);

	gtk_box_pack_start(GTK_BOX(masterbox), textframe, TRUE, TRUE, 2);
	gtk_box_pack_start(GTK_BOX(vbox), entry, TRUE, TRUE, 1);
	gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 1);
	gtk_box_pack_start(GTK_BOX(masterbox), vbox, FALSE, FALSE, 2);

	gtk_container_add(GTK_CONTAINER(fenster),masterbox);

	gtk_widget_show_all(fenster);
	gtk_main();
	return 0;
}

Die Möglichkeit zu Speichern wurde noch nicht eingefügt und daher auch nicht im Code vorhanden.

Ich danke schon für jede hilfe die Ihr mir entgegen bring.

Mit freundlichen Grüßen
Volto
 
Hallo,
Guten Tag ich bin Volto,
ich habe ein kleines Problem mit dem nach folgendem teil meines Programmes.
Code:
if((int)gtk_entry_get_text(GTK_ENTRY(entry)) == 1){
gtk_text_insert (GTK_TEXT(textframe), NULL, NULL, NULL, "Weiblich", -1);
}else if((int)gtk_entry_get_text(GTK_ENTRY(entry)) == 2){
gtk_text_insert(GTK_TEXT(textframe), NULL, NULL, NULL, "Maennlich", -1);
}

Du kannst einen char Zeiger nicht einfach in einen int casten und dann erwarten das der Wert des Integers gleich dem Wert des Strings ist.

Besser ist so:
C:
if(g_ascii_strncasecmp (gtk_entry_get_text (GTK_ENTRY(entry)), "1", 1) == 0)
  gtk_text_insert(GTK_TEXT (textframe), NULL, NULL, NULL, "Weiblich", -1);
else if(g_ascii_strncasecmp (gtk_entry_get_text (GTK_ENTRY (entry)), "2", 1)
        == 0)
  gtk_text_insert (GTK_TEXT (textframe), NULL, NULL, NULL, "Maennlich", -1);

siehe:
http://library.gnome.org/devel/glib/stable/glib-String-Utility-Functions.html#g-ascii-strncasecmp

Gruß,
RedWing
 
Danke für die schnelle Antwort RedWing,
das hat mir sehr geholfen da aber mir immer noch ein fehler ausgegeben wurde habe ich nach einer verwanten funktion gesucht und in g_strncasecmp() gefunden.

Mit freundlichen Grüßen
Volto
 
Zurück