unerwartet Handlung



  • Hallo Freunde ich bin es wieder einmal (Nervi *grinst*) Ich bin dabei mir c++ im Selbststudium etwas näher zu bringen.
    Heute durfte ich ein Programm schreiben was zur Umrechnung von Franke in Euro und umgekehrt benuzt werden kann. der Sinn darin ist lernen zu wie man switch-Anweisungen benutzen kann.
    Alles funktioniert wunderbar ausser die Tatsache das wenn ich anstelle von "x" ein "e" benutze und zb. 100e eingebe stürzt das Programm ab. Gebe ich 100 e ein ist alles gut.
    Nehme ich aber nun anstelle von "e" ein "x" kann ich 100x und 100 x schreiben und beides funktioniert wunderbar.

    Ich verstehe nur nicht wesshalb das so ist und hoffe Ihr könnt mich vieleicht darüber aufklären.

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	const double euro = 1.2925;	// eine konstante Variable des typs double die den wert von einem Euro in franken deklariert . dieser wert kann nicht verändert werden 
    	double franken = 1;
    	char waehrung = ' '; // ein Leerzeichen ist keine Einheit
    
    	cout << "Geben Sie bitte die Menge gfolgt von der Waehrung ein!\n"
    		 << "wobei \"x\" f\x81r Euro und \"f\" f\x81r Franken steht\n";
    
    	cin >> franken >> waehrung;
    
    	switch(waehrung)
    	{
    	case 'y':
    		cout << franken << " Franken sind genau " << franken/euro << " Euro.\n";
    		break;
    
    	case 'f':
    		cout << franken << " Euro sind genau " << franken*euro << " EFranken.\n";
    		break;
    
    	default:
    		cout << "Sorry, diese Waehrung ist mir leider nicht bekannt!\n";
    		break;
    	}
    
    	cin.get();
    	cin.get();
    	return 0;
    }
    

    Das ist der funktionierende code
    und unten folgt der nicht funktionierende wobei ich darauf hindeuten möchte das alles zu 100% gleich ist ausser das ich den Buchstaben "e" durch "x" ersetzt habe.

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	const double euro = 1.2925;	// eine konstante Variable des typs double die den wert von einem Euro in franken deklariert . dieser wert kann nicht verändert werden 
    	double franken = 1;
    	char waehrung = ' '; // ein Leerzeichen ist keine Einheit
    
    	cout << "Geben Sie bitte die Menge gfolgt von der Waehrung ein!\n"
    		 << "wobei \"e\" f\x81r Euro und \"y\" f\x81r Franken steht\n";
    
    	cin >> franken >> waehrung;
    
    	switch(waehrung)
    	{
    	case 'y':
    		cout << franken << " Franken sind genau " << franken/euro << " Euro.\n";
    		break;
    
    	case 'e':
    		cout << franken << " Euro sind genau " << franken*euro << " EFranken.\n";
    		break;
    
    	default:
    		cout << "Sorry, diese Waehrung ist mir leider nicht bekannt!\n";
    		break;
    	}
    
    	cin.get();
    	cin.get();
    	return 0;
    }
    

  • Administrator

    100e ist eine Zahl. e steht dabei für eine Zehnerpotenz. 100e1 ist zum Beispiel 100 * 101. 100e wird wahrscheinlich als 100e0 verstanden. Das Programm wird aber kaum abstürzen. Es funktioniert höchstens nicht wie gewünscht, bzw. beendet sich sehr schnell. Wenn du es in einer Konsole auführst, würdest du noch sehen, dass "Sorry, diese Waehrung ist mir leider nicht bekannt!\n" ausgegeben wird.

    Grüssli



  • Dravere schrieb:

    100e ist eine Zahl. e steht dabei für eine Zehnerpotenz. 100e1 ist zum Beispiel 100 * 101. 100e wird wahrscheinlich als 100e0 verstanden. Das Programm wird aber kaum abstürzen. Es funktioniert höchstens nicht wie gewünscht, bzw. beendet sich sehr schnell. Wenn du es in einer Konsole auführst, würdest du noch sehen, dass "Sorry, diese Waehrung ist mir leider nicht bekannt!\n" ausgegeben wird.

    Grüssli

    Ach ja die ganze Zahlensache hab ich nicht beadcht 🙂 ... Vielen Dank für Deine Hilfe. Natürlich hast Du auch recht mit der annahme das das Programm nicht abstürzt sondern genau so wie Du es beschreibst nicht funktioniert und sich sehr schnell beendet. Ich hab mich da fehlerhaft ausgedrückt.

    Besten Dank noch einmal. Du warst mir eine grosse Hilfe.

    Gruss Dadeldi



  • Hmm, ich kann den Fehler nicht nachvollziehen. Habe das mit CodeBlocks und g++ 4.5 ausprobiert.

    Gruß Blue-Tec


  • Administrator

    Ups, habe auch einen kleinen Fehler in meinem oberen Beitrag. Es wird nicht als 100e0 verstanden, sondern als falsch formatierte Gleitkommazahl. std::cin wird daher in einen Fehlerzustand gesetzt. Die Variable waehrung wird somit nicht mehr ausgelesen und behält das Leerzeichen. std::cin.get() funktioniert logischerweise auch nicht mehr, weil der Stream immer noch im Fehlerzustand ist. Das Programm erreicht ohne Pause das Ende und beendet sich ganz normal.

    Grüssli



  • Also bei mir kommt immer "Sorry, diese Waehrung ist mir leider nicht bekannt!" auch wenn ich 100e eingeben beim zweiten Programm.



  • blue-tec schrieb:

    Also bei mir kommt immer "Sorry, diese Waehrung ist mir leider nicht bekannt!" auch wenn ich 100e eingeben beim zweiten Programm.

    Das Programm mit "e" reagiert fehlerhaft aus dem Grund den Dravere genannt hat. benutze das Programm wo ich "e" durch "x" ausgetauscht habe das funktioniert 🙂

    Danke Euch nocheinmal.

    Gruss Dadeldi


Anmelden zum Antworten