Vergleich



  • Hallo ich hab da mal ne Frage. Ist der Vergleich zwischen einem Float und einem Char möglich ? Ich hab nen kleinen Umrechner programmiert und ich möchte das die Konsolen wenn man buchstaben eintippt dann Falsche Eingabe ausspuckt wie mache ich das am bessten ?? Und wie schaffe ich das die Konsole das Euro und Yen Zeichen anzeigt ?? Bin noch neuling in C++


  • Mod

    Sebistyla24 schrieb:

    Hallo ich hab da mal ne Frage. Ist der Vergleich zwischen einem Float und einem Char möglich ?

    Jain. Wenn du float_wert == char_wert schreibst, ist das ein gültiger Vergleich. Aber es macht nicht das, was du dir vorstellst. Siehe auch nächster Absatz:

    Ich hab nen kleinen Umrechner programmiert und ich möchte das die Konsolen wenn man buchstaben eintippt dann Falsche Eingabe ausspuckt wie mache ich das am bessten ??

    Ich denke, du stellst dir falsch vor, was passiert, wenn Buchstaben mit einer float-Einlesefunktion gelesen werden sollen. Du denkst anscheinend, die Buchstaben landen irgendwie in dem float. Aber wie soll das gehen? Der float kann nur Fließkommazahlen speichern. Was stattdessen passiert: Die Einlesefunktion wird fehlschlagen und die Buchstaben werden in der Regel im Eingabestream verbleiben. Für dein vorhaben muss also folgendes gemacht werden:
    -Prüfen, ob die Einlesefunktion erfolgreich war -> Rückgabewert beachten
    -In C++ werden Einlesestreams in einen Fehlerstatus versetzt, wenn eine Lesefunktion fehlschlägt. Diesen Status muss man erst zurück setzen, wenn man weiter auf dem Stream arbeiten will -> istream::clear
    -Das, was nicht gelesen werden konnte, wird noch im Stream sein. Das muss irgendwie verarbeitet werden, zum Beispiel, indem man es überspringt. -> istream::ignore

    So könnte das aussehen:

    #include <iostream>
    using namespace std;
    
    int main() 
    {
    	float f = 0;
    	do
    	{
    		if (cin >> f)  // Lesen und Prüfen
    		{
    			cout << "Fließkommazahl gelesen: " << f << '\n';
    		}
    		else
    		{
    			cout << "Unlesbares Zeichen entdeckt. Verwerfe.\n";
    			cin.clear();
    			cin.ignore(1);
    		}
    	}
    	while (f != 123);
    }
    

    http://ideone.com/T5ThvK

    Solch "interaktive" Leseschleifen sind eher ungewöhnlich, wenn man direkt auf den Streams arbeitet (was du als Anfänger solltest). Ich empfehle, im Fehlerfall einfach abzubrechen und dir nicht so viele Gedanken über Nutzerführung zu machen. Konzentrier dich lieber da drauf, dass deine Programme tolle Sachen machen, damit du besser programmieren lernst. So sieht eine typische Leseschleife aus:

    float f;  // Oder beliebiger Datentyp
    while (cin >> f)     // Lesen der Daten und Prüfen auf Erfolg. Statt cin kann hier jeder istream stehen
    {
      // Verarbeiten der Daten
    };
    

    Und wie schaffe ich das die Konsole das Euro und Yen Zeichen anzeigt ?? Bin noch neuling in C++

    Wenn es ganz portabel sein soll, dann indem du das passende universal character set Zeichen benutzt. In den meisten Fällen sollte es reichen, wenn du das Zeichen direkt im Programmcode benutzt (vorausgesetzt dein Editor und die Anzeige benutzen die gleiche Codierung):

    #include <iostream>
    using namespace std;
    
    int main() 
    {
    	cout << "Direkt: €\nUCS: \u20AC\n";
    }
    


  • Wenn es ganz portabel sein soll, dann indem du das passende universal character set Zeichen benutzt. In den meisten Fällen sollte es reichen, wenn du das Zeichen direkt im Programmcode benutzt (vorausgesetzt dein Editor und die Anzeige benutzen die gleiche Codierung):

    #include <iostream>
    using namespace std;
    
    int main() 
    {
    	cout << "Direkt: €\nUCS: \u20AC\n";
    }
    

    kann Visual C++ 2010 beides nicht 😞



  • Die einfachste Variante ist einfach "EUR" bzw. "JPY" auszugeben. Die andere besteht darin nachzusehen, welche Codepage die Windows verwendet. Das geht mit dem Befehl chcp (auf Kommandozeile eingeben). Mit der Nummer kann man dann herausfinden, wo welche Zeichen liegen. Das Yen-Zeichen liegt auf 0xBE, also wird es so ausgegeben "\xBE". Das Euro-Zeichen liegt nicht in der Codepage, wenn man es versucht einzutippen kommt ein Fragezeichen. Auch nach einem Wechsel auf die Codepage 858 (Westeuropäisch mit Euro-Zeichen) gibt die Konsole bei mir eine hochgestellte 1 aus.


Log in to reply