100 Zufalls Zahlen



  • Hallo.

    Ich weiß nicht, ob ich hier richtig bin, aber ich habe folgendes Problem. Ich soll ein Programm schreiben, welches 10 Zufallszahlen erzeugt und anzeigt. Bei mir jedoch zeigt er immer nur eine Zahl an. Ich finden einfach den Fehler nicht und in anderen Foren, bekomme ich nur Dumme Komentare aber keine konkreten Beispiele oder Hinweiese was und wie ich ändern muss.

    Hier ist der Code:
    #include <iostream>
    #include <cstdlib>
    #include <iomanip>
    #include <stdlib.h>
    #include <time.h>

    using namespace std;

    int main()
    {
    int const ANZ = 100;
    char auswahl;
    int feld[ANZ]={0};

    while (true)
    {
    cout << "Was wollen Sie tun?" << endl
    << "Zufallswerte erzeugen\t [i]" << endl
    << "Das Feld ausgeben\t [a]" << endl
    << "Das Programm beenden\t\ [b]" << endl << endl
    << "-->";
    cin >> auswahl;

    switch(auswahl)
    {
    case 'i':
    srand(time(NULL));
    for(int i=0; i<ANZ;i++);
    {
    feld[ANZ]=rand()%1000+1;
    }
    break;
    case 'a':
    if(feld[0] !=0)
    {
    for(int i=0; i<ANZ;i++)
    {
    cout << feld[i] << endl;
    }
    else
    {
    cout << "Bitte erst Zahlen generieren!" << endl ;
    }
    }
    break;
    case 'b':
    return 0;
    }
    }
    }

    Bitte. Ich will keine Kommentare lesen. Ich sitze schon den ganzen Tag und finden den Fehler nicht.



  • feld[i]=rand()%1000+1;



  • volkard schrieb:

    feld[i]=rand()%1000+1;

    Auch, aber das ist nicht der Fehler. Wobei man den Fehler sehen würde wenn das korrekt wäre.

    for(int i=0; i<ANZ;i++); // Das Semikolon hier ist falsch
    { 
        feld[i]=rand()%1000+1; 
    }
    

    PS: Wenn du schon Code postest bitte mit Code Tags, und den richtigen Code. Der den du gepostet hast kompiliert nicht mal.



  • volkard schrieb:

    feld[i]=rand()%1000+1;

    rand() Considered Harmful



  • Das ist mein code, den ich geschrieben habe. Und bei mir zeigt er nur 1 Zahl an!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



  • Soll das witzig sein? Mach doch erstmal, dass dein Code kompiliert... Und dann entfern das Semikolon in Zeile (ich weiß nicht welche, weil keine Code tags).

    Das wäre hinter der For-Schleife im case 'i'

    Außerdem willst du nicht feld[groesseDesFelders] eine Zahl zu weisen, sondern von 0 bis groesse des Feldes, d.h. feld[i]...

    Das Ganze könnte dann so aussehen (natürlich suboptimal, aber "funktioniert")

    #include <array>
    #include <cstdlib>
    #include <iostream>
    #include <time.h>
    
    using namespace std;
    
    int main()
    {
        srand(time(nullptr));
        const int anzahl = 10;  // muss größer als 0 sein
        array<int, anzahl> feld {};
    
        while (true) {
            cout << "Was wollen Sie tun?\n"
                << "Zufallswerte erzeugen\t [i]\n"
                << "Das Feld ausgeben\t [a]\n"
                << "Das Programm beenden\t\ [b]\n\n"
                << "-->";
            char auswahl;
            cin >> auswahl;
    
            switch (auswahl) {
            case 'i':
                for (int i = 0; i < feld.size(); ++i)
                    feld[i] = rand() % 1000 + 1;
                break;
            case 'a':
                if (feld[0] != 0) {  // sonst knallts hier
                    for (int i = 0; i < feld.size(); ++i)
                        cout << feld[i] << '\n';
                }
                else 
                    cout << "Bitte erst Zahlen generieren!\n";
                break;
            case 'b':
                return 0;
            }
        }
    }
    


  • Dann kann mans natürlich auch so machen:

    #include <random>
    
    //...
    std::random_device seed;
    std::mt19937 generator(seed()); 
    std::uniform_int_distribution<int> dist(1, 100);
    //...
    for (int i = 0; i < feld.size(); ++i)
        feld[i] = dist(generator);
    

    Oder so ähnlich. Wenns nicht passt, wirds bestimmt einer der Programmierer mit mehr Erfahrung hier sagen



  • rand() ist hier absolut ausreichend. lasst doch mal die kirche im dorf.


Anmelden zum Antworten