zahlen von klein nach groß sortieren



  • Hi,

    am Ende der main-Funktion noch ein return 0; setzen. Aber lassen doch mittlerweile viele eh weg, deshalb wundert es mich, das es bei dir nicht klappt.

    gruß Christopher



  • Mohamedyarub schrieb:

    @ Bashar

    also wenn ich int main schreibe, dann bekomm ich diesen fehler

    warning C4508: 'main' : function should return a value; 'void' return type assumed

    bekomm diese warnung öfters und die umgehe ich, wenn ich einfach void main schreibe

    1. Das ist eine Warnung und kein Fehler. Der Unterschied ist dir klar?
    2. void main war schon immer, ist und wird immer falsch sein.
    3. Die Warnung behebst du, indem du das machst, worauf sie dich hinweißt, nämlich einen Wert zurückgeben.

    Wobei ich es seltsam finde, dass der Compiler dafür eine Warnung ausgibt (wo doch die main-Funktion auto. 0 zurückgibt), ihm aber void main keine Warnung wert ist. 😮



  • Die main Funktion gibt beim Erreichen des Scopeende automatisch 0 zurück, insofern wiederspricht die Warnung dem Standard. Welchen Compiler und welche Einstellungen nutzt du?



  • 1. Das ist eine Warnung und kein Fehler. Der Unterschied ist dir klar?

    leider nein

    void main war schon immer, ist und wird immer falsch sein.

    warum übernimmt es das programm? kann das programm mit void main ausführen.

    ich benutze den Microsoft Visual Basic 6.00 standard edition mit den standard einstellungen. hab nichts verändert


  • Mod

    Hmm, ein Basic Compiler für C++, kein Wunder, dass da komische Sachen passieren 😃 .

    Und 6.0? Das ist von wann? 1998? Das ist aus Zeiten, da gab es C++ offiziell noch gar nicht! Warum wunderst du dich da noch, dass der Compiler nicht standardkonform ist?

    Visual Studio (man ist übrigens mittlerweile bei 10, bald kommt 11) ist in der Express-Edition übrigens gratis.



  • Mohamedyarub schrieb:

    1. Das ist eine Warnung und kein Fehler. Der Unterschied ist dir klar?

    leider nein

    Fehler = Wenn du etwas machst, das nicht den Sprachregeln des C++ Standards entspricht, du sozusagen einen Grammatikfehler (Syntaxfehler) begehst.

    Warnung = Der Compiler will dich auf etwas hinweisen. Du hast unter Umständen einen Semantikfehler in deinem Programm. Wenn du z.B. einer int-Variablen einen double-Wert zuweist, macht dich der Compiler darauf aufmerksam, dass es hier zu einem Informationsverlust kommt. Vielleicht ist das von dir so gewollt, da du die Gleitkommazahl abrunden willst. Vielleicht ist das von dir auch nicht so gewollt, du hast dich aus Versehen verschrieben, du wolltest eine double-Variable und keine int-Variable.

    Mohamedyarub schrieb:

    warum übernimmt es das programm? kann das programm mit void main ausführen.
    ich benutze den Microsoft Visual Basic 6.00 standard edition mit den standard einstellungen. hab nichts verändert

    Weil das schon uralt ist. Damals tickten die Compiler noch nicht so standardkonform.



  • pyhax schrieb:

    Gibt es eigentlich in C++11 irgendetwas um dieses Problem zu umgehen?

    Das gabs schon vorher, nämlich getline und stringstream benutzen. Das funktioniert garantiert:

    #include <string>
    #include <iostream>
    #include <sstream>
    
    int main()
    {
    
        std::string command_line;
    
        while(command_line != "quit")
        {
            int x,y,z;
            if(std::getline(std::cin, command_line) && std::istringstream(command_line) >> x >> y >> z)
            {
                std::cout << "x: " << x << "  y: " << y << "  z: " << z << std::endl;
            }
            else
            {
                std::cout << "Bad input: " << command_line << std::endl;
            }
        }
    
    }
    


  • Tachyon schrieb:

    pyhax schrieb:

    Gibt es eigentlich in C++11 irgendetwas um dieses Problem zu umgehen?

    Das gabs schon vorher, nämlich getline und stringstream benutzen. Das funktioniert garantiert:

    Ich dachte da eher ein etwas einfacheres, z.B std::cin.rdbuf()->raw gibt den Puffer als std::string zurück, oder std::cin.rdbuf()->reset()



  • pyhax schrieb:

    Tachyon schrieb:

    pyhax schrieb:

    Gibt es eigentlich in C++11 irgendetwas um dieses Problem zu umgehen?

    Das gabs schon vorher, nämlich getline und stringstream benutzen. Das funktioniert garantiert:

    Ich dachte da eher ein etwas einfacheres, z.B std::cin.rdbuf()->raw gibt den Puffer als std::string zurück, oder std::cin.rdbuf()->reset()

    Da gibt es leider überall implementierungsspezifische Details, die eine einheitliche Behandlung nicht möglich machen. Vielleicht kann man auf der jeweiligen Plattform nicht einfach die unerliegenden Puffer plattmachen.
    Und bei der Variante mit std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); blockt u.U. die Eingabe, bis man ein \n in den Stream schiebt. Je nach Programmfluss hat man also auch dabei nicht das gewünschte Verhalten.



  • Hmm, ein Basic Compiler für C++, kein Wunder, dass da komische Sachen passieren 😃 .

    Und 6.0? Das ist von wann? 1998? Das ist aus Zeiten, da gab es C++ offiziell noch gar nicht! Warum wunderst du dich da noch, dass der Compiler nicht standardkonform ist?

    Visual Studio (man ist übrigens mittlerweile bei 10, bald kommt 11) ist in der Express-Edition übrigens gratis.

    das wusste ich garnicht. dachte alle c++ programme wären das gleiche nur mit anderen design.
    ich habe visual studio 10 schon auf dem pc. werde es ab sofort immer statt der version 6 benutzen.

    danke nochmal an alle für die guten antworten. hab jetzt vieles dazu gelernt. 🙂


Anmelden zum Antworten