seltsamer fehler



  • #include <iostream.h>
    
    void main ()
    
    {
    	int a;
    
    	cout << "a eingeben:";
    	cin >> a;
    	cout << a;
    }
    

    wenn man für a '08' oder '09' eingibt, wird in a '0' gespeichert. wenn man allerdings z.b. '02' eingibt wird wie erwartet '2' gespeichert. kann mir das bitte mal jemand erklären ?

    mfg,
    😉



  • Ohne jetzt groß auszuprobieren sage ich folgendes:

    Wenn eine 0 vor einer Zahl steht, beudeutet dies, dass die Zahl im Oktalsystem steht. Da dieses aber die Ziffern 8 und 9 nicht kennt, wird der Fehlercode 0 an a übergeben.



  • Ausserdem wäre es besser den Header mit #include <iostream> einzubinden und dann den namespace std auflösen, oder mit std:: drauf zuzugreifen.

    Ausserdem sollte main int zurückgeben.



  • ja, das weiß ich auch. es war ja auch nur mal schnell zum testen. da waren die 2 extra zeilen einfach nicht drin :D. aber trotzdem danke.

    mfg,
    😉



  • hmm, gibt es den eine möglichkeit, dass ich '08' eingeben kann, aber es dennoch als dezimale 8 gewertet wird? ich denke da an einen cast oder sowas ähnliches.

    mfg,
    😉



  • #include <sstream>
    #include <string>
    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout << "Bitte geben Sie eine Zahl ein: ";
        string buffer;
        cin >> buffer;
        while(buffer[0]=='0' && buffer.length()!=1)
            buffer.erase(0, 1);
        stringstream Str;
        Str << buffer;
        int a;
        Str >> a;
        cout << "Die Zahl lautet " << a;
        return 0;
    }
    

    Ungetestet. Es kann auch sein, dass die Schleife unnötig ist.



  • int main () 
    
    { 
        int a; 
        cout << "a eingeben:" << endl;
        cin.setf(ios::dec, ios::basefield);
        cin >> a; 
    
        cout << a; 
    }
    

    Du kannst das mit der setf Memberfunktion machen:
    hex, oct oder dec kannst du dort eintragen und jeweils die entsprechende Ausgabe erzwingen.

    Ich weiss aber nicht, ob das auch für iostream.h funktioniert.



  • danke, so geht's (hab mich extra an den c++-standard gehalten, damit Jover auch zufrieden ist 😃 😃 😃 )

    #include <iostream>
    
    int main () 
    
    { 
        int a;
    
    	std::cout << "a eingeben: ";
    
        std::cin.setf(std::ios::dec, std::ios::basefield); 
        std::cin >> a; 
    
        std::cout << a << std::endl; 
    
    	return 0;
    }
    

Anmelden zum Antworten