noob question unsigned



  • Hallo,

    ich habe hier ein Problem mit den Vorzeichen.
    Um eine negative Zahl in der Eingabe auszuschließen, habe ich unsigned
    verwendet. Der Compiler gibt mir aber einen Fehler aus. Weiß wer warum?

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main(){
    
    unsigned double zahl;
    
    cout << "Gib ne Zahl ein" << endl;
    
    cin >> zahl;
    
    cout << "Die Wurzel aus "
         << zahl << " beträgt : "
         << sqrt(zahl) << endl;
    
    
    return 0;
    }
    
    


  • @Lou-Cyphr3

    einen Fehler

    Und du hältst es nicht für nötig, den Fehlertext zu zeigen?

    Es gibt kein unsigned double. unsigned ist immer int.



  • @manni66 sagte in noob question unsigned:

    Es gibt kein unsigned double. unsigned ist immer int.

    Was ist mit unsigned char ? 😎

    Nun zunächst bedeutet "unsigned" ja nur sowas wie "ohne Vorzeichen". Und ursprünglich hieß es auch mal "unsigned int". Der Gedanke ist also nicht so verrückt. Trotzdem gibt es das nicht, da hast du vollkommen recht.

    Mein Compiler sagt:
    main.cpp|8|error: 'signed' or 'unsigned' invalid for 'zahl'

    Der Grund wurde genannt.
    Nimm einen normalen double und prüfe nach der Eingabe ob die Zahl eventuell negativ ist. Nur weil dein Datentyp "unsigned" ist, also ohne Vorzeichen, heißt das noch nicht, dass "cin" das auch sicherstellt, dass nur positive Zahlen eingegeben werden.



  • @It0101 Danke, dass du es nicht verrückt findest.

    Wir sollen ausschließlich double verwenden.
    Daran habe ich ach schon gedacht, aber wie prüft man nach der Eingabe?
    Wir haben IF übrigens noch nicht eingeführt.

    Danke
    Lou


  • Banned

    @Lou-Cyphr3 sagte in noob question unsigned:

    @It0101 Danke, dass du es nicht verrückt findest.

    Wir sollen ausschließlich double verwenden.
    Daran habe ich ach schon gedacht, aber wie prüft man nach der Eingabe?
    Wir haben IF übrigens noch nicht eingeführt.

    Danke
    Lou

    Mach: zahl = abs(zahl);
    Dann verschwindet ein eventuell negatives Vorzeichen.



  • @RBS2

    das vorzeichen ist tatsächlich weg, allerding gibt es jetzt noch immer "nam"
    aus


  • Banned

    @Lou-Cyphr3 sagte in noob question unsigned:

    @RBS2

    das vorzeichen ist tatsächlich weg, allerding gibt es jetzt noch immer "nam"
    aus

    Du meinst NAN?
    In welcher Zeile denn?



  • Ups, da hab ich mich verlesen.
    in Zeile 16.

    PS: Was bedeutet NAN? Slangsausdruck für non?
    PPS: Wo find ich den ne Doku zu der abs() Fnktion?



  • @Lou-Cyphr3 NaN == Not a Number (einfach mal googeln).

    int main(){
        double zahl;
        cout << "Gib ne positive Zahl ein\n";
        if (!(cin >> zahl) || zahl < 0) {
            cout << "Ungueltige Eingabe!\n";
            return -1;
        }
        cout << "Die Wurzel aus " << zahl << " beträgt : " << sqrt(zahl) << '\n';
    }
    
    

    Wo find ich den ne Doku zu der abs() Fnktion?

    In google eingeben "std::abs". Gilt für alles aus der Standard Bibliothek.



  • Danke, das ist eine Möglichkeit es zu lösen, wäre da nicht die
    noch nicht eingeführte IF- Anweisung.

    edit: Ich habs jetzt. abs() gehört in den cout strom
    Danke an @RBS2 nochmal.



  • @Lou-Cyphr3 sagte in noob question unsigned:

    @RBS2

    das vorzeichen ist tatsächlich weg, allerding gibt es jetzt noch immer "nam"
    aus

    Das "NAN" entsteht, wenn du versuchst aus einer negativen Zahl eine Wurzel zu ziehen. D.h. du musst vor deiner Operation "sqrt" sicherstellen dass die Zahl >= 0 ist. "abs" ist eine Möglichkeit. Aber vor der Ausgabe nicht im std::cout


Log in to reply