Bekomme unlogische zahlen die nicht Stimmen!



  • [Gelöst]

    Hallo Leute 🙂

    Ich habe mich daran getan ein Programm zu schreiben das 2 zahlen einliest, schaut welche der Zahlen Größer ist und über eine "if...else" funktion dan entweder x oder y ausgibt. Nur jetzt zu meinem Problem:
    Wenn ich in die erste zahl z.b. eine 7 eingebe fragt er mich schon gar nicht nach der zwiten zahl sondern gibt einfach das aus: "Die eingegebene zahl 55 ist größer als die eingegebene zahl 13."
    Dabei habe ich niemals eine 55 oder 13 eingegeben lediglich die 7!
    Ich komme da echt nicht draus 😡
    hoffe mir kann jemand helfen
    und schonmal vielen Dank 🙂

    Hier mein Quelltext:

    /* #################################################
    if....else funktion

    ################################################# */

    #include "stdafx.h"

    using namespace System;

    int main(array<System::String ^> ^args)

    {
    Int32 zahl1, zahl2;

    char ergebnis;

    Console::WriteLine("Programm welches ihnen sagt ob das eigegebene x, oder y größer ist.");
    Console::WriteLine("Bitte geben Sie die erste Zahl ein: ");
    zahl1 = Console::Read();

    Console::WriteLine("Bitte geben Sie die zweite Zahl ein: ");
    zahl2 = Console::Read();

    ergebnis = (zahl1 < zahl2);

    if (ergebnis = true)
    Console::WriteLine(" Die eingegebene zahl {0} ist größer als die eigegebene Zahl {1}.", zahl1, zahl2);
    else
    Console::WriteLine(" Die eingegebene zahl {0} ist kleiner als die eigegebene Zahl {1}.", zahl1, zahl2);
    Console::Read();
    Console::Read();
    return 0;
    }



  • Bitte nächstes mal im richtigen Board posten. Ich poste schonmal eine formatierte und in Code-Tags gesetzte Version (natürlich mit meinen Kommentaren):

    #include "stdafx.h"
    
    using namespace System;
    
    int main() // Wenn man keine Parameter braucht, weglassen?
    {
    	Int32 zahl1, zahl2;
    
    	char ergebnis; // Du deklarierst diese Variable zu früh und speicherst dann einen boolschen Wert darin ab, und kein Zeichen. Wieso nicht sofort bool?
    
    	Console::WriteLine("Programm welches ihnen sagt ob das eigegebene x, oder y größer ist.");
    	Console::WriteLine("Bitte geben Sie die erste Zahl ein: ");
    	zahl1 = Console::Read(); // Liest Read nicht nur ein Zeichen?
    
    	Console::WriteLine("Bitte geben Sie die zweite Zahl ein: ");
    	zahl2 = Console::Read();
    
    	ergebnis = (zahl1 < zahl2);
    
    	if (ergebnis = true) // Das ist doch völliger Unsinn! DAs ist eine Zuweisung und kein Vergleich, die zudem natürlich immer wahr ist.
    		Console::WriteLine(" Die eingegebene zahl {0} ist größer als die eigegebene Zahl {1}.", zahl1, zahl2);
    	else
    		Console::WriteLine(" Die eingegebene zahl {0} ist kleiner als die eigegebene Zahl {1}.", zahl1, zahl2);
    
    	Console::Read();
    	Console::Read(); // Ist das nicht das Äquivalent zu cin.get()?
    	return 0; // Ist das in C++/CLI nicht überflüssig?
    }
    

    Aber ich bleibe vorsichtig, von C++/CLI habe ich wenig Dunst.

    Auch wenn es ganz lust'g aussieht.



  • Console::Read() macht eine Zeicheneingabe, und wenn du 7 ENTER eingibst, ist 55 der ASCII-Code von '7' und 13 der ASCII-Code des Enter-Zeichens (genauer: Wagenrücklauf.) Die Eingabe wird nie als Zahl ausgewertet.

    Wie man am besten eine Zahl in C++/CLI eingibt weiß ich nicht, vermutlich erstmal Console::ReadLine(), dann ParseInt und Konsorten. Siehe MSDN.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • int z1 = Convert::ToInt32(Console.ReadLine());
    


  • Fail! Für Benutzereingaben etc. immer TryParse benutzen.



  • Was mache ich mit TryParse?
    Sorry Leute bin ein blutiger Anfänger und noch am lernen...



  • Okay Leute ich habe es jetzt Selber herausgefunden aber ich verstehe nicht warum das so ist 😕

    So funktionierts:

    #include "stdafx.h"
    
    using namespace System;
    
    int main(array<System::String ^> ^args)
    
    {
    	Int32 zahl1, zahl2;
    
    	bool ergebnis;
    
    	Console::WriteLine("Programm welches ihnen sagt ob das eigegebene x, oder y größer ist.");
    	Console::WriteLine("Bitte geben Sie die erste Zahl ein: ");
    	zahl1 = Convert::ToInt32(Console::ReadLine());
    
    	/*
    	Habe jetzt ReadLine genommen die aber eigentlich einen 
    	String ausgibt und es dan unten zu einem Int wert
    	convertiert aber mit Read hätte es doch eigentlich auch 
        gehen müssen da der Read ja direkt einen Int wert ausgibt oder nicht?
    	*/
    
    	Console::WriteLine("Bitte geben Sie die zweite Zahl ein: ");
    	zahl2 = Convert::ToInt32(Console::ReadLine());
    
    	if (ergebnis == true)
    		Console::WriteLine(" Die eingegebene zahl {0} ist größer als die eigegebene Zahl {1}.", zahl1, zahl2);
    	else
    		Console::WriteLine(" Die eingegebene zahl {0} ist kleiner als die eigegebene Zahl {1}.", zahl1, zahl2);
    	Console::Read();
    	Console::Read();
    	return 0;
    }
    }
    

    Wäre cool wen mir noch jemand sagen könnte warum es jetzt funktioniert 😃

    Aber trotzdem Leute vielen Dank 🙂

    P.S.: Besonders Hilfreich war :

    • schrieb:

    [code="cli"
    Console::WriteLine("Bitte geben Sie die erste Zahl ein: ");
    zahl1 = Console::Read(); // Liest Read nicht nur ein Zeichen?

    Danke schön dafür 🙂



  • Ich kann dir auch nicht zu 100% erklären warum das so ist. Dem eingegebenen Wert wird jedoch immer ein Zeilenvoschub und ein Wagenrücklauf angehangen, was erklärt das er Zahlen benutzt die du so nicht eingegeben hast.
    Console::Read() benutze ich nur z.B. in Verbindung mit einer switch-Anweisung und wenn ich nur ein Zeichen abfragen möchte.
    Möchte ich Zeichenketten einlesen, dazu gehören auch aneinander gereihte Zahlen, nutze ich ReadLine. Zahlen müssen natürlich in den korrekten Typ Konvertiert werden.

    Wofür soll die Boolean Variable sein? Was willst du damit feststellen?

    Dem Text entnehme ich das du prüfen möchtest welche der eingegebenen Zahlen größer ist. Dafür brauchst du keine Boolean Variable. Du hast schon alles was du brauchst. Vergleiche zahl 1 über den entsprechenden Operanden mit zahl2. Dann stimmt auch die Semantik.

    Und das zweite Console::Read() kannst du dir auch sparen.



  • Console::Read liest den Ascii-Code der Taste ein, die gedrückt wurde. Das ist bei 7 z.B. wie Bashar schon schrieb die 55.

    Das ist der Grund, warum deine Anforderung mit Console::Read nicht funktioniert.


Anmelden zum Antworten