numeric limits



  • hi, bei mir (vs13) werden numeric limits in hexa angezeigt. wie kriegt man das in dezimalzahlen ihn? grüße



  • Zeige Code, dann zeigen wir den Fehler.



  • cout << numeric_limits<int>::max();
    

    gibt bei mir bei mir eine hexadezimalzahl aus. Wie kann ich eine Dezimalzahl ausgeben lassen?

    noch andere frage:

    	vector <int>test{ 1, 2, 3, 4, 5 };
    	for (int bla : test){
    		test[bla] = 0;
    		cout << bla << endl;
    	}
    
    	system("pause");
    

    Eigentlich sollte jeder vectoreintrag auf 0 gesetzt werden. in der Ausgabe kommt bei mir 1, 0 3, 0 und dann eine Fehlermeldung, weshalb?

    man kann das Problem zwar mit &zahl lösen aber wieso nicht mit der aufgeführten methode?



  • Zu deiner ersten Frage: Bin mir nicht sicher ob es dafür irgendwo eine Einstellung gibt. Was passiert wenn du es wie folgt probierst:

    cout << dec << numeric_limits<int>::max();
    

    Zu deiner zweiten Frage: Wenn du jedes Element auf 0 setzten möchtest, sollte die wie folgt aussehen:

    for (int &bla : test) { //Die Referenz spart unnötiges Kopieren
        bla = 0;
        cout << bla << endl;
    }
    

    Bei der Range-Based-For-Loop gibst du vor dem Doppelpunkt das Objekt an, welches jeweils für die Iteration genutzt wird. "bla" ist also immer das aktuelle Objekt der Iteration. Bei cout hast du es auch richtig gemacht.

    PS: Bin auch nur Anfänger. Falls ich was falsches geschrieben habe, so möge man mir auf den Hinterkopf schlagen und mich korrigieren. Danke 🙂



  • @teragott sagte in numeric limits:

    cout << numeric_limits<int>::max();
    

    gibt bei mir bei mir eine hexadezimalzahl aus.

    Und was passiert vorher in deinem Code? Muss man dir jedes Bit einzeln aus der Nase ziehen?



  • Ich verstehe nicht warum, beim zweiten code 1,0,3,0,fehlermeldung kommt.
    eigentlich wird ja eine zuweisung gemacht aber nur bei jedem 2ten loop



  • Du hast meine Antwort nicht gelesen. Das aktuelle Element ist bla und nicht test[bla]. Beim ersten Durchlauf ist bla 1, beim zweiten 2, beim dritten 3, beim vierten 4 und beim fünften 5. Da du aber nicht einfach bla zuweist, sondern test[bla] kommt es zu deinem Fehler.

    Erster Durchlauf:
    Du setzt test[1] auf 0. // Denn 1 == bla
    Dann gibst du bla aus und bla ist 1.

    Zweiter Durchlauf:
    Du setzt test[0] auf 0. // Denn bla (das aktuelle Element) hast du beim ersten Durchlauf auf 0 gesetzt. Deshalb jetzt test[0]
    Dann gibst du wieder bla aus und bla ist 0

    usw...

    Lässt du dir deinen std::vector mal danach ausgeben, ist der eigentliche Inhalt: 0, 0, 3, 0, 5. Falls du mir nicht folgen kannst, schau es dir mal Schritt für Schritt in einem Debugger an. Dein Fehler kommt zustande, weil du nicht bla auf 0 setzt (was du eigentlich willst) sondern test an der Stelle bla (wodurch es zu dem Verhalten kommt, was du nicht beabsichtigst).



  • Um es kürzer zu sagen:
    Bei int bla : test ist bla der aktuelle Wert im vector, nicht der Index!

    Mit einem anderen Datentyp ist es wohl verständlicher:

    vector<string> test{ "1", "2", "3", "4", "5" };
    for (string bla : test) // 'int bla' kompiliert nicht!
    {
        test[bla] = "0"; // <- bla ist kein Index, sondern ein String also z.B. "1", daher Fehlermeldung!
        cout << bla << endl;
    }
    

Log in to reply