Suche Hilfe für ein kleines, simples Programm :)



  • dEUs schrieb:

    Idiot 👎

    Man, das war doch nur ein Witz, weil er so ne anonyme Gruppe hat. Ich appeliere an deinen Humor... 😉



  • So hier ist der Code, der bei mir mit Dev-Cpp laeuft... Ich bin bei manchen Variablen auf strings umgestiegen und hoffe, dass das kein Problem darstellt! Ausserdem habe ich noch ein paar horizontale Linien zur besseren Uebersicht eingefuegt.

    //---------------------------------------------------------------------------
    
    #include <iostream>
    #include <string>
    #include <stdio.h>
    
    using namespace std;
    
    //---------------------------------------------------------------------------
    typedef struct
    {
    	char *code;
    } s_code;
    
    const int anzahl = 3;						// Anzahl der Fragen
    
    // hier stehen alle Codes, fuer alle moeglichen Antworten drin
    s_code alle_codes[anzahl][5] =
    {
    	// Code zur 1. Frage
    	{	"A1",	"A2",	"A3",	"A4",	"A5"	},
    
    	// Code zur 2. Frage
    	{	"B1",	"B2",	"B3",	"B4",	"B5"	},
    
    	// Code zur 3. Frage
    	{	"Cc1",	"Cc2",	"Cc3",	"Cc4",	"Cc5"	}
    };
    
    s_code code[anzahl];						// der Code, der erstellt werden soll
    
    int fragen( int n );						// diese Funktion stellt die Fragen
    
    int main()
    {
    	string txt = "";						// der komplette Code in einem string
    											// zum Speichern und Ausgeben
    	string filename = "";					// der Name der zu erstellenden Textdatei
    	char k = 0;								// die gedrueckte Taste
    	char trennzeichen[1];		  			// das Trennzeichen zwischen den einzelnen
    											// Codes
    
    	trennzeichen[0] = ' ';
    
    	do
    	{
    		system( "cls" );
    		txt = "";
    
    		int n = 0;							// erste Frage
    
    		do
    		{
    			int r = fragen( n );			// stelle die Frage und schreibe den
    											// Rueckgabewert in eine Variable
    
    			if( r == 0 )					// wenn '0' zurueckgegeben wurde
    			{
    				cout << endl << "Moechten Sie wirklich beenden? J/N" << endl;
    				cin >> k;
    
    				if( k == 'J' || k == 'j' )
    				{
    					return 0;						// beende das Programm
    				}
    			}
    			else							// andernfalls
    			{
    				n += r;							// springe zur naechsten
    												// oder zur vorherigen Frage
    			}
    			cout << endl;
    		} while( n < anzahl );				// wenn alle Fragen durch sind
    
    		cout << endl;
    		cout << "----------------------------------------------------------------------" << endl << endl;
    
    		cout << "Code: ";
    
    		for( int a = 0; a < anzahl; a++ )	// Code fuer jede Frage einzeln durchlaufen
    		{
    			// den aktuellen Code zu der Variable fuer den kompletten Code hinzufuegen
    			txt.insert( txt.size(), code[a].code );
    
    			// wenn wir nicht beim letzten Code sind
    			if( a != anzahl-1 )
    			{
    				txt.insert( txt.size(), " " );
    			}
    		}
    
    		cout << txt << endl << endl; 		// den Code ausgeben
    		cout << "----------------------------------------------------------------------" << endl << endl;
    
    		cout << "[E] zum Beenden druecken." << endl;	// Hinweis zum Beenden
    		cout << "Eine andere Taste druecken, um an den Anfang zu springen" << endl;
    
    		cin >> k;
    	} while( k != 'E' && k != 'e' );		// Wenn nicht 'E' oder 'e' gedrueckt wurde
    											// beginne von vorne
    
    	cout << endl;
    	cout << "----------------------------------------------------------------------" << endl << endl;
    	cout << "Geben Sie jetzt bitte den kompletten Pfad und den Namen der" << endl;
    	cout << "Textdatei an, in der das Ergebnis gespeichert werden soll!" << endl;
    	cout << endl << "Datei: ";
    
    	cin >> filename;
    
    	cout << endl;
    	cout << "----------------------------------------------------------------------" << endl << endl;
    
    	FILE *file;			  				  	// Dateihandle
    
    	file = fopen( filename.c_str(), "w" );// Datei oeffnen / erstellen
    
    	if( !file )								// Wenn das Handle ungueltig ist
    	{
    		// Gebe Hinweis aus und beende
    		cout << "Die Datei konnte nicht erstellt werden werden." << endl;
    		cout << "Das Programm wird beendet!" << endl;
    		return 0;
    	}
    
    	cout << "Die Datei wird erstellt...";
    
    	fwrite( txt.c_str(), txt.size(), 1, file );	// schreibe Code in die Datei
    	fclose( file );							// schliesse die Datei
    
    	cout << endl << "Die Datei wurde erstellt!" << endl;	// Hinweis ausgeben
    
    	cout << endl;
    	cout << "----------------------------------------------------------------------" << endl << endl;
    
    	cout << "Beliebige Taste zum Beenden druecken." << endl;
    
        cin.clear();                            // nach Tastendruck beenden
        cin.ignore( std::cin.rdbuf() -> in_avail() );
        cin.get();
    
    	return 0;								// beenden
    }
    //---------------------------------------------------------------------------
    
    int fragen( int n )
    {
    	char k = ' ';							// die gedrueckt Taste
    
    	if( n == 0 )							// die richtige Frage stellen
    	{
    		cout << "1. Wie alt bist du?" << endl;
    		cout << "[1] Zwischen 18 und 25 Jahre" << endl;
    		cout << "[2] Zwischen 25 und 35 Jahre" << endl;
    		cout << "[3] Zwischen 35 und 45 Jahre" << endl;
    		cout << "[4] älter als 45 Jahre" << endl;
    		cout << "[5] Bin mir nicht sicher :P" << endl;
    	}
    
    	else if( n == 1 )
    	{
    		cout << "2. Wieviele Geschwister hast du?" << endl;
    		cout << "[1] Einen Bruder" << endl;
    		cout << "[2] Eine Schwester" << endl;
    		cout << "[3] Zwei Geschwister" << endl;
    		cout << "[4] Mehr als zwei Geschwister" << endl;
    		cout << "[5] Keine Geschwister" << endl;
    		cout << "[B] zur voherigen Frage zurueckspringen" << endl;
    	}
    
    	else if( n == 2 )
    	{
    		cout << "3. Bist du einsam?" << endl;
    		cout << "[1] Ja total" << endl;
    		cout << "[2] Ja ein bisschen" << endl;
    		cout << "[3] Eigentlich nicht" << endl;
    		cout << "[4] Nein" << endl;
    		cout << "[5] Was heisst das?" << endl;
    		cout << "[B] zur voherigen Frage zurueckspringen" << endl;
    	}
    
    	do
    	{
    		// lasse solange eine Taste eingeben, bis es eine Taste von 1-5 oder 'B' oder 'b'
    		// war
    		cin >> k;
    
    		// wenn bei der ersten Frage 'B' oder 'b' gedrueckt wurde
    		if( k == 'b' && n == 0 || k == 'B' && n == 0 )
    		{
    			// nicht gueltig, deshalb setzen wir 'k' auf '0'
    			k = '0';
    		}
    	} while(	k != '1' && k != '2' && k != '3' && k != '4' && k != '5' &&
    				k != 'B' && k != 'b' && k != 'e' && k != 'E' );
    
    	if( k == 'e' || k == 'E' )
    	{
    		return 0;
    	}
    	else if( k == 'B' || k == 'b' )	 		// wenn 'B' oder 'b' gedrueckt wurde
    	{
    		return -1;								// gebe -1 zurueck
    	}
    	else									// andernfalls
    	{
    		int ascii = int( k ) - 49;				// schreibe den Asciiwert der
    												// gedrueckten Taste in eine Variable
    		code[n].code = alle_codes[n][ascii].code;	// schreibe den Code
    		return 1;								// gebe 1 zurueck
    	}
    }
    

    Ich denke, dass es jetzt funktioniert.
    MfG Aoeke



  • Hi Aoeke,

    das Programm funktioniert super! 🙂 Die Idee mit der Pfadangabe ist auch sehr praktisch. Vielen, vielen Dank 😃

    Werde mich dann jetzt gleich mal drann setzten und versuchen die anderen 25 Fragen da rein zu basteln 🙂

    Ich freue mich echt, das du dich an dein Wort gehalten hast. Also nochmals Danke! 🙂

    Mit lieben Grüßen,

    Tanuka



  • Waere nett, wenn du mir dann vielleicht mal die Endversion des Programms zuschicken koenntest, da ich mal auf die Fragen gespannt bin..
    MfG Aoeke



  • Kein Problem aber die kannst du dir auch auf der Seite ansehen, die ich dir per Mail geschickt habe. Gehe dort mal auf den Punkt "Über mich" und unten steht dann ein Code. Wenn du daneben dann auf "Version im Klartext" klickst, kannst du alle Fragen mit den Antwortmöglichkeiten sehen 🙂

    Mit freundlichen Grüßen,

    Tanuka



  • Hi Aoeke,

    also ich habe nun mal bischen mit deinem Quelltext rumexperimentiert. Habe ne vierte Frage eingebaut und die Antwortmöglichkeiten mal auf 9 erhöt.
    Funktioniert alles super, nur hat sich da nun folgendes Problem ergeben. Dieses von mir ganz nett erdachte Leerzeichen hinter jedem Code hat sich nun als ungünstig erwiesen, da wie sich nun rausgestellt hat, er das bei den ersten 3 Fragen nicht machen darf. Habe auch herausgefunden, das ich das Leerzeichen einfach hinter die entsprechenden Codes setzten kann und das wäre somit die bessere Lösung. Das Problem ist nun bloß, das ich dieses automatische setzten des Leerzeichens einfach nicht mehr aus dem Programm raus bekomme 😛 Die Stelle wo du das setzten des Leerzeichens mit einem Hinweis definiert hast, kann ich komplett löschen und er setzt es trotzdem 😛

    Desweiteren stimmt beim erstellen der Textdatei auch etwas nicht. Wenn ich einen korrekten Pfad angebe, dann erstellt er dort wie erwünscht die Datei aber wenn ich da unfug angebe, kommt nicht wie erwartet die Meldung, das die Datei nicht erstellt werden konnte, sondern er meint das die Datei erstellt wurde..

    Mit lieben Grüßen,

    Tanuka



  • Zum ersten Problem:

    // in dieser Schleife wird der Code zusammengesetzt
            for( int a = 0; a < anzahl; a++ )    // Code fuer jede Frage einzeln durchlaufen 
            { 
                // den aktuellen Code zu der Variable fuer den kompletten Code hinzufuegen 
                txt.insert( txt.size(), code[a].code ); 
    // HIER WIRD DAS LEERZEICHEN GESETZT!
    // Das heisst, wenn du es nicht haben willst, musst du das komplette if-Statement wegnehmen!
                // wenn wir nicht beim letzten Code sind 
                if( a != anzahl-1 ) 
                { 
                    txt.insert( txt.size(), " " ); 
                } 
            }
    

    Zum zweiten Problem: Er hat die Textdatei ja auch erstellt. :p Und zwar im aktuellen Arbeitsverzeichnis. Musst du dann mal in das Verzeichnis schauen, wo sich die Exe befindet. Da muesste dann die Datei auftauchen. Ist bei mir jedenfalls so.
    MfG Aoeke



  • Stimmt! Hast recht 🙂

    Das ist echt genial.. die ersten 4 Fragen erzeugen nun schon genau den richtigen Code 🙂

    Bei der 5ten habe ich nun allerdings ein etwas größeres Problem 😞

    Mal ein Beispiel:

    Wie Alt warst du, als du dich das erste mal verliebt hast?

    Hier brauche ich nun die eingabe des Anwenders hinter dem Code.

    Also der Code ist z.B. für diese Frage Y- und wenn derjenige dann eingibt, das er 16 war, sollte der Code Y-16 sein.

    Wir hatten es doch ganz am Anfang mal, das die eingegebene Zahl des Anwenders in den Code integriert wurde.. Das müsste man nun noch irgendwie für bestimmte Fragen einstellen können 🙂

    Mit lieben Grüßen,

    Tanuka



  • OK. Dann aendert sich fuer dich folgendes:

    // FRAGE HINZUFUEGEN MIT CODE
    const int anzahl = 4;						// Anzahl der Fragen
    
    // hier stehen alle Codes, fuer alle moeglichen Antworten drin
    s_code alle_codes[anzahl][5] =
    {
    	// Code zur 1. Frage
    	{	"A1",	"A2",	"A3",	"A4",	"A5"	},
    
    	// Code zur 2. Frage
    	{	"B1",	"B2",	"B3",	"B4",	"B5"	},
    
    	// Code zur 3. Frage
    	{	"Cc1",	"Cc2",	"Cc3",	"Cc4",	"Cc5"	},
    
    	// 4. Frage --> DIESE FRAGE WIRD ES
    	{	"Y-",	"Y-",	"Y-",	"Y-",	"Y-"	}
    };
    
    [...]
    
    // FRAGEN FUNKTION VERAENDERN!
    int fragen( int n )
    {
    	string k = "";							// die gedrueckt Taste
    	bool done = false;
    
    	if( n == 0 )							// die richtige Frage stellen
    	{
    		cout << "1. Wie alt bist du?" << endl;
    		cout << "[1] Zwischen 18 und 25 Jahre" << endl;
    		cout << "[2] Zwischen 25 und 35 Jahre" << endl;
    		cout << "[3] Zwischen 35 und 45 Jahre" << endl;
    		cout << "[4] älter als 45 Jahre" << endl;
    		cout << "[5] Bin mir nicht sicher :P" << endl;
    	}
    
    	else if( n == 1 )
    	{
    		cout << "2. Wieviele Geschwister hast du?" << endl;
    		cout << "[1] Einen Bruder" << endl;
    		cout << "[2] Eine Schwester" << endl;
    		cout << "[3] Zwei Geschwister" << endl;
    		cout << "[4] Mehr als zwei Geschwister" << endl;
    		cout << "[5] Keine Geschwister" << endl;
    		cout << "[B] zur voherigen Frage zurueckspringen" << endl;
    	}
    
    	else if( n == 2 )
    	{
    		cout << "3. Bist du einsam?" << endl;
    		cout << "[1] Ja total" << endl;
    		cout << "[2] Ja ein bisschen" << endl;
    		cout << "[3] Eigentlich nicht" << endl;
    		cout << "[4] Nein" << endl;
    		cout << "[5] Was heisst das?" << endl;
    		cout << "[B] zur voherigen Frage zurueckspringen" << endl;
    	}
    
    	else if( n == 3 )
    	{
    		cout << "Wann hast du dich das erste Mal verliebt?" << endl;
    		cout << "Alter: ";
    	}
    
    	do
    	{
    		// lasse solange eine Taste eingeben, bis es eine Taste von 1-5 oder 'B' oder 'b'
    		// war
    		cin >> k;
    
    		// wenn erste frage dran war
    		if( n == 0 )
    		{
    			if( strcmpi( k.c_str(), "1" ) == 0 || strcmpi( k.c_str(), "2" ) == 0 ||
    				strcmpi( k.c_str(), "5" ) == 0 || strcmpi( k.c_str(), "4" ) == 0 ||
    				strcmpi( k.c_str(), "1" ) == 0 || strcmpi( k.c_str(), "e" ) )
    			{
    				done = true;
    			}
    		}
    
    		// wenn eine der anderen Fragen dran war (mit Ausnahme von denen,
    		// wo die Eingabe zum Code hinzugefuegt werden soll
    		else if( n > 0 && n != 3 )
    		{
    			if( strcmpi( k.c_str(), "1" ) == 0 || strcmpi( k.c_str(), "2" ) == 0 ||
    				strcmpi( k.c_str(), "5" ) == 0 || strcmpi( k.c_str(), "4" ) == 0 ||
    				strcmpi( k.c_str(), "1" ) == 0 || strcmpi( k.c_str(), "b" ) == 0 ||
    				strcmpi( k.c_str(), "e" ) )
    			{
    				done = true;
    			}
    		}
    
    		// wenn eine Frage dran war, wo die Eingabe hinzugefuegt werden soll
    		else if( n == 3 )
    		{
    			if( strlen( k.c_str() ) > 0 )
    			{
    				done = true;
    			}
    		}
    
    	} while( !done );
    
    	if( strcmpi( k.c_str(), "e" ) == 0 )		// wenn "e" oder "E" gedrueckt wurde
    	{
    		return 0;									// gebe 0 zurueck
    	}
    	else if( strcmpi( k.c_str(), "b" ) == 0 )	// wenn "B" oder "b" gedrueckt wurde
    	{
    		return -1;									// gebe -1 zurueck
    	}
    	else if( n == 3 )							// wenn die vierte Frage dran war
    	{
    		code[n].code = alle_codes[n][0].code;		// hol den Code aus der alle_codes variable
    
    		// KANN SEIN, DASS ER BEI DIESER ZEILE ABSTUERZT
    		// ICH HABE DEV NICHT MEHR DRAUF UND KONNTE ES NICHT TESTEN
    		// WENN ER ABSTUERZT, MELDE DICH EINFACH NOCHMAL
    		strncat( code[n].code, k.c_str(), strlen( k.c_str() ) ); // haenge die
    													// Eingabe an den Code heran
    		return 1;									// gebe 1 zurueck
    	}
    	else										// andernfalls
    	{
    		int ascii = int( k[0] ) - 49;				// schreibe den Asciiwert der
    													// gedrueckten Taste in eine Variable
    		code[n].code = alle_codes[n][ascii].code;	// schreibe den Code
    		return 1;									// gebe 1 zurueck
    	}
    }
    

    So hat es bei mir funktioniert.
    MfG Aoeke



  • Uff.. nun wirds echt kompliziert und ich muß da ja leider auch halbwegs verstehen was dort was bewirkt, da ich ja die Antwortmöglichkeiten inzwischen von 5 auf 9 erhöht habe..

    Also folgendes kann ich nicht ganz nachvollziehen:

    if( n == 0 )
    {
    if( strcmpi( k.c_str(), "1" ) == 0 || strcmpi( k.c_str(), "2" ) == 0 ||
    strcmpi( k.c_str(), "5" ) == 0 || strcmpi( k.c_str(), "4" ) == 0 ||
    strcmpi( k.c_str(), "1" ) == 0 || strcmpi( k.c_str(), "e" ) )
    {
    done = true;
    }

    Sollte das nicht eigentlich so sein?:

    if( n == 0 )
    {
    if( strcmpi( k.c_str(), "1" ) == 0 || strcmpi( k.c_str(), "2" ) == 0 ||
    strcmpi( k.c_str(), "3" ) == 0 || strcmpi( k.c_str(), "4" ) == 0 ||
    strcmpi( k.c_str(), "5" ) == 0 || strcmpi( k.c_str(), "e" ) )
    {
    done = true;
    }

    und wenn nicht? Wo steht, was passiert, wenn man bei Frage 1 die 3 drückt und warum ist die 1 zwei mal vorhanden? *verwirrt bin* 😛

    MfG,

    Tanuka



  • Oh, schusselheitsfehler... Na klar muss es da so stehen, wie du es verbessert hast... 😃
    MfG Aoeke



  • Ah, gut, dann blicke ich da ja doch annähernd durch 😃
    Ich war schon total verwirrt :p

    Also habe das so eingebaut und wie du befürchtet hast, stürzt das Programm ab, nachdem man die Alterseingabe eingetippt hat.

    MfG,

    Tanuka



  • Gut.. Dann folgendes:

    // ANSTATT DIESEM STUECKCHEN CODE
        else if( n == 3 )                            // wenn die vierte Frage dran war
        {
            code[n].code = alle_codes[n][0].code;        // hol den Code aus der alle_codes variable
    
            // KANN SEIN, DASS ER BEI DIESER ZEILE ABSTUERZT
            // ICH HABE DEV NICHT MEHR DRAUF UND KONNTE ES NICHT TESTEN
            // WENN ER ABSTUERZT, MELDE DICH EINFACH NOCHMAL
            strncat( code[n].code, k.c_str(), strlen( k.c_str() ) ); // haenge die
                                                        // Eingabe an den Code heran
            return 1;                                    // gebe 1 zurueck
        }
    
    // NIMMST DU DIESEN:
    	else if( n == 3 )							// wenn die vierte Frage dran war
    	{
    		code[n].code = alle_codes[n][0].code;		// hol den Code aus der alle_codes variable
    
    		 // haenge die Eingabe an den Code heran gebe 1 zurueck
    		string tmp;
    		tmp.insert( tmp.size(), code[n].code );
    		tmp.insert( tmp.size(), k );
    		strcpy( code[n].code, tmp.c_str() );
    		return 0;
    	}
    

    Dann muesste es funktionieren...
    MfG Aoeke



  • Da stürzt er immer noch nach der eingabe des Alters ab..

    Und müsste das nicht eigentlich statt:

    string tmp;
    tmp.insert( tmp.size(), code[n].code );
    tmp.insert( tmp.size(), k );
    strcpy( code[n].code, tmp.c_str() );
    return 0;
    }

    string tmp;
    tmp.insert( tmp.size(), code[n].code );
    tmp.insert( tmp.size(), k );
    strcpy( code[n].code, tmp.c_str() );
    return 1;
    }

    lauten? Also return 1 und nicht 0?

    Aber auch mit 1 stürzt er da ab..

    Liebe Grüße,

    Tanuka



  • Mist... 😃 Natürlich muss da dann auch wieder "return 1;" stehen... 😃 Aber das weißt du jetzt inzwischen ja selber... 😃 Wegen dem anderen Fehler, muss ich eben doch wieder dev installieren.. Ich melde mich dann nochmal...
    MfG Aoeke



  • Hehe, finde ich Lustig.. ich habe zwar keine Ahnung von C++ aber erkenne trotzdem, nur durch Logik, Fehler im Quelltext 😃

    Mir macht das langsam richtig Spaß.. vielleicht sollte ich doch mal anfangen C++ zu lernen 🙂

    Also dann warte ich mal auf deine Antwort 🙂

    MfG,

    Tanuka



  • Sooo. Sorry, dass ich mich erst wieder so spaet melde, hatte aber wegen eines anderen Projekts gerade voll Zeitstress...
    Naja, ich habe den Code noch mal ein bisschen mehr veraendert, deshalb poste ich ihn jetzt auch noch einmal komplett. Die veraenderten Stellen sind mit einem Kommentar gekennzeichnet.

    //---------------------------------------------------------------------------
    
    #include <iostream>
    #include <string>
    #include <stdio.h>
    #include <conio.h>
    
    using namespace std;
    
    //---------------------------------------------------------------------------
    
    /////////////// NEU ///////////////
    typedef struct
    {
    	string code;	// HIER jetzt string
    } s_code;
    /////////////// NEU ///////////////
    
    const int anzahl = 4;						// Anzahl der Fragen
    
    // hier stehen alle Codes, fuer alle moeglichen Antworten drin
    s_code alle_codes[anzahl][5];
    
    /////////////// NEU ///////////////
    // Funktion, mit der man die moeglichen Antworten "fuellen" kann
    void SetAnswers( int i, string a0, string a1, string a2, string a3, string a4 )
    {
    	alle_codes[i][0].code = a0;
    	alle_codes[i][1].code = a1;
    	alle_codes[i][2].code = a2;
    	alle_codes[i][3].code = a3;
    	alle_codes[i][4].code = a4;
    }
    /////////////// NEU ///////////////
    
    s_code code[anzahl];						// der Code, der erstellt werden soll
    
    int fragen( int n );						// diese Funktion stellt die Fragen
    
    int main()
    {
    	/////////////// NEU ///////////////
    	// Moegliche Antworten "fuellen"
    	SetAnswers( 0, "A1", "A2", "A3", "A4", "A5" );	// moegliche Antworten fuer 1. Frage
    	SetAnswers( 1, "B1", "B2", "B3", "B4", "B5" );	// ...
    	SetAnswers( 2, "C1", "C2", "C3", "C4", "C5" );	// ...
    	SetAnswers( 3, "Y-", "Y-", "Y-", "Y-", "Y-" );	// ...
    	/////////////// NEU ///////////////
    
    	string txt = "";						// der komplette Code in einem string
    											// zum Speichern und Ausgeben
    	string filename = "";					// der Name der zu erstellenden Textdatei
    
    	/////////////// NEU ///////////////
    	// hier jetzt auch string
    	string k = "";						   	// die gedrueckte Taste
    	/////////////// NEU ///////////////
    
    	do
    	{
    		system( "cls" );
    		txt = "";
    
    		int n = 0;							// erste Frage
    
    		do
    		{
    			int r = fragen( n );			// stelle die Frage und schreibe den
    											// Rueckgabewert in eine Variable
    
    			if( r == 0 )					// wenn '0' zurueckgegeben wurde
    			{
    				cout << endl << "Moechten Sie wirklich beenden? J/N" << endl;
    				cin >> k;
    
    				/////////////// NEU ///////////////
    				// hier jetzt auch stricmp
    				if( stricmp( k.c_str(), "j" ) == 0 )
    				{
    					return 0;						// beende das Programm
    				}
    				/////////////// NEU ///////////////
    			}
    			else							// andernfalls
    			{
    				n += r;							// springe zur naechsten
    												// oder zur vorherigen Frage
    			}
    			cout << endl;
    		} while( n < anzahl );				// wenn alle Fragen durch sind
    
    		cout << endl;
    		cout << "----------------------------------------------------------------------" << endl << endl;
    
    		cout << "Code: ";
    
    		for( int a = 0; a < anzahl; a++ )	// Code fuer jede Frage einzeln durchlaufen
    		{
    			// den aktuellen Code zu der Variable fuer den kompletten Code hinzufuegen
    			txt.insert( txt.size(), code[a].code );
    
    			// wenn wir nicht beim letzten Code sind
    			if( a != anzahl-1 )
    			{
    				txt.insert( txt.size(), " " );
    			}
    		}
    
    		cout << txt << endl << endl; 		// den Code ausgeben
    		cout << "----------------------------------------------------------------------" << endl << endl;
    
    		cout << "[E] zum Beenden druecken." << endl;	// Hinweis zum Beenden
    		cout << "Eine andere Taste druecken, um an den Anfang zu springen" << endl;
    
    		cin >> k;
    
    	/////////////// NEU ///////////////
    	// hier jetzt auch stricmp
    	} while( stricmp( k.c_str(), "e" ) != 0 );		// Wenn nicht 'E' oder 'e' gedrueckt wurde
    													// beginne von vorne
    	/////////////// NEU ///////////////
    
    	cout << endl;
    	cout << "----------------------------------------------------------------------" << endl << endl;
    	cout << "Geben Sie jetzt bitte den kompletten Pfad und den Namen der" << endl;
    	cout << "Textdatei an, in der das Ergebnis gespeichert werden soll!" << endl;
    	cout << endl << "Datei: ";
    
    	cin >> filename;
    
    	cout << endl;
    	cout << "----------------------------------------------------------------------" << endl << endl;
    
    	FILE *file;			  				  	// Dateihandle
    
    	file = fopen( filename.c_str(), "w" );// Datei oeffnen / erstellen
    
    	if( !file )								// Wenn das Handle ungueltig ist
    	{
    		// Gebe Hinweis aus und beende
    		cout << "Die Datei konnte nicht erstellt werden werden." << endl;
    		cout << "Das Programm wird beendet!" << endl;
    		return 0;
    	}
    
    	cout << "Die Datei wird erstellt...";
    
    	fwrite( txt.c_str(), txt.size(), 1, file );	// schreibe Code in die Datei
    	fclose( file );							// schliesse die Datei
    
    	cout << endl << "Die Datei wurde erstellt!" << endl;	// Hinweis ausgeben
    
    	cout << endl;
    	cout << "----------------------------------------------------------------------" << endl << endl;
    
    	cout << "Beliebige Taste zum Beenden druecken." << endl;
    
        cin.clear();                            // nach Tastendruck beenden
        cin.ignore( std::cin.rdbuf() -> in_avail() );
        cin.get();
    
    	return 0;								// beenden
    }
    //---------------------------------------------------------------------------
    
    int fragen( int n )
    {
    	string k = "";							// die gedrueckt Taste
    	bool done = false;
    
    	if( n == 0 )							// die richtige Frage stellen
    	{
    		cout << "1. Wie alt bist du?" << endl;
    		cout << "[1] Zwischen 18 und 25 Jahre" << endl;
    		cout << "[2] Zwischen 25 und 35 Jahre" << endl;
    		cout << "[3] Zwischen 35 und 45 Jahre" << endl;
    		cout << "[4] älter als 45 Jahre" << endl;
    		cout << "[5] Bin mir nicht sicher :P" << endl;
    	}
    
    	else if( n == 1 )
    	{
    		cout << "2. Wieviele Geschwister hast du?" << endl;
    		cout << "[1] Einen Bruder" << endl;
    		cout << "[2] Eine Schwester" << endl;
    		cout << "[3] Zwei Geschwister" << endl;
    		cout << "[4] Mehr als zwei Geschwister" << endl;
    		cout << "[5] Keine Geschwister" << endl;
    		cout << "[B] zur voherigen Frage zurueckspringen" << endl;
    	}
    
    	else if( n == 2 )
    	{
    		cout << "3. Bist du einsam?" << endl;
    		cout << "[1] Ja total" << endl;
    		cout << "[2] Ja ein bisschen" << endl;
    		cout << "[3] Eigentlich nicht" << endl;
    		cout << "[4] Nein" << endl;
    		cout << "[5] Was heisst das?" << endl;
    		cout << "[B] zur voherigen Frage zurueckspringen" << endl;
    	}
    
    	else if( n == 3 )
    	{
    		cout << "Wann hast du dich das erste Mal verliebt?" << endl;
    		cout << "Alter: ";
    	}
    
    	do
    	{
    		// lasse solange eine Taste eingeben, bis es eine Taste von 1-5 oder 'B' oder 'b'
    		// war
    		cin >> k;
    
    		// wenn erste frage dran war
    		if( n == 0 )
    		{
    			/////////////// NEU ///////////////
    			// Hier war ein kleiner Fehler (ausser der falschen Reihenfolge :) )
    			// in der 3. Zeile des if-Statements muss natuerlich auch mit 0
    			// verglichen werden... Dass hatte ich vorher glaube ich vergessen
    			if( stricmp( k.c_str(), "1" ) == 0 || stricmp( k.c_str(), "2" ) == 0 ||
    				stricmp( k.c_str(), "3" ) == 0 || stricmp( k.c_str(), "4" ) == 0 ||
    				stricmp( k.c_str(), "5" ) == 0 || stricmp( k.c_str(), "e" ) == 0 )
    			/////////////// NEU ///////////////
    			{
    				done = true;
    			}
    		}
    
    		// wenn eine der anderen Fragen dran war (mit Ausnahme von denen,
    		// wo die Eingabe zum Code hinzugefuegt werden soll
    		else if( n > 0 && n != 3 )
    		{
    			/////////////// NEU ///////////////
    			// Hier war auch der Fehler in der 4. Zeile des if-Statements
    			if( stricmp( k.c_str(), "1" ) == 0 || stricmp( k.c_str(), "2" ) == 0 ||
    				stricmp( k.c_str(), "3" ) == 0 || stricmp( k.c_str(), "4" ) == 0 ||
    				stricmp( k.c_str(), "5" ) == 0 || stricmp( k.c_str(), "b" ) == 0 ||
    				stricmp( k.c_str(), "e" ) == 0 )
    			/////////////// NEU ///////////////
    			{
    				done = true;
    			}
    		}
    
    		// wenn eine Frage dran war, wo die Eingabe hinzugefuegt werden soll
    		else if( n == 3 )
    		{
    			if( strlen( k.c_str() ) > 0 )
    			{
    				done = true;
    			}
    		}
    
    	} while( !done );
    
    	if( stricmp( k.c_str(), "e" ) == 0 )		// wenn "e" oder "E" gedrueckt wurde
    	{
    		return 0;									// gebe 0 zurueck
    	}
    	else if( stricmp( k.c_str(), "b" ) == 0 )	// wenn "B" oder "b" gedrueckt wurde
    	{
    		return -1;									// gebe -1 zurueck
    	}
    	else if( n == 3 )							// wenn die vierte Frage dran war
    	{
    		/////////////// NEU ///////////////
    		// diesmal klappt es auch mit dev-cpp :)
    		code[n].code = alle_codes[n][0].code;		// hol den Code aus der alle_codes variable
    		code[n].code.insert( k.size(), k );			// fuege die Eingabe hinzu
    		return 1;									// gebe 1 zurueck
    		/////////////// NEU ///////////////
    	}
    	else										// andernfalls
    	{
    		int ascii = int( k[0] ) - 49;				// schreibe den Asciiwert der
    													// gedrueckten Taste in eine Variable
    		code[n].code = alle_codes[n][ascii].code;	// schreibe den Code
    		return 1;									// gebe 1 zurueck
    	}
    }
    

    Fuer weitere Fragen bin ich weiterhin offen... 😃
    MfG Aoeke



  • Hi Aoeke,

    nun läuft das wirklich super.. bin gerade bei der 11ten Frage und bisher funktioniert alles so, wie es soll *freu*

    Praktisch wäre es noch, wenn er das Programm im Vollbildmodus starten würde.

    Ansonsten kann ich mich nur nochmals ganz herzlich bei dir für deine Mühe bedanken 🙂

    Ich melde mich dann nochmal, wenn ich das Programm fertig habe oder unerwartete Probleme auftauchen.. Werden wohl übrigens doch so an die 40 Fragen, statt der erwarteten 25 😛

    Liebe Grüße,

    Tanuka



  • Vollbild:

    // inlclude Anweisung hinzufuegen
    #include <windows.h>
    
    [...]
    
    // dann unter dem Funktionsrumpf von "SetAnswers()"
    void FullScreen()
    { 
        keybd_event( VK_MENU , 0x38 , 0 , 0 );
        keybd_event( VK_RETURN , 0x1c , 0 , 0 );
        keybd_event( VK_RETURN , 0x1c , KEYEVENTF_KEYUP , 0 );
        keybd_event( VK_MENU , 0x38 , KEYEVENTF_KEYUP , 0 );
    }
    
    [...]
    
    // Dann als erste Zeile von "main()"
    int main()
    {
        FullScreen();
    [...]
    

    MfG Aoeke


Anmelden zum Antworten