Kleines Programm großer Fehler =)..



  • Hallo, ich bin neu hier und wollte erstmal zu allen Hallo sagen, bevor ich zu meiner Frage Schreite.
    Also ich programmiere Java seit ca 1-2 Monaten und wollte nun ein Programm schreiben, dass direkt unter Windows auführbar ist. Da C++ ohne JIT läuft habe ich das gewählt.

    Das Programm soll folgende funktion besitzen:

    • 4 Spieler tippen ihren Namen ein,
    • Spieler ziehen eine Zusatzzahl
    • die Zusatzzahl entscheidet wer gegeneinander Antritt

    Jedoch hat das Programm einen Haken...
    Wenn ich z.B. Hans als ersten Namen eintippe, dann teilt das Programm die 4 Buchstaben auf und vergibt sie aus... (er überspringt auch einfach die anderen 3 abfragen...)
    wie hier:
    http://250kb.de/u/061105/j/e32d9d1b.jpg

    Wenn ich jetzt die Buchstaben H,a,n,s eintippe überspringt er die anderen abfragen nicht.

    siehe hier :
    http://250kb.de/u/061105/j/74d01886.jpg

    Das die Zufallszahlen nicht funktionieren ist mir klar, jedoch muss ich da irgendwie Datum oder so einfügen, aber wie und wo ? Naja finde ich bestimmt noch raus...

    Jedoch würde ich gerne klären, warum er nur einen Buchstaben pro Abfrage akzeptiert und keine ganzen Namen ?
    Hier mein "Skript":

    #include <cstdlib>  
    #include <iostream>  
    
    using namespace std;  
    
    int main(int argc, char *argv[])  
    {  
    
    cout<<"Das hier ist der Enemyfinder 0.1 von Jannis Mahlitz!!"<<endl;  
    cout<<""<<endl;  
    cout<<""<<endl;  
    cout<<"----------------------------------------------"<<endl;  
    char sp_1;  
    char sp_2;  
    char sp_3;  
    char sp_4;  
    
    cout<<"Spieler Nummer 1 heist ? "<<endl;  
    cin>>sp_1;  
    cout<<"Spieler Nummer 2 heist ? "<<endl;  
    cin>>sp_2;  
    cout<<"Spieler Nummer 3 heist ? "<<endl;  
    cin>>sp_3;  
    cout<<"Spieler Nummer 4 heist ? "<<endl;  
    cin>>sp_4;  
    
    //----------Random Funktion--------------------//  
    char a = 4 + ( rand() % 77 ) ;  
    char b = 1 + ( rand() % 34 ) ;  
    char c = 4 + ( rand() % 78 ) ;  
    char d = 1 + ( rand() % 64 ) ;  
    //-------------------Random Ende--------------//  
    if (a <=b)  
    
    if (a < c)  
    
    if (a < d){  
    a = sp_2;  
    c = sp_3;  
    d = sp_1;  
    b = sp_4;  
    }  
    else {  
    c = sp_2;  
    d = sp_1;  
    b = sp_3;  
    a = sp_4;  
    }  
    
    else  
    if (c < d){  
    a = sp_3;  
    c = sp_4;  
    b = sp_1;  
    d = sp_2;  
    }  
    else{  
    a = sp_4;  
    b = sp_3;  
    c = sp_2;  
    d = sp_1;  
    }  
    else  
    if (b < c)  
    if (b < d){  
    b = sp_4;  
    a = sp_3;  
    c = sp_2;  
    d = sp_1;  
    }  
    else{  
    b = sp_1;  
    c = sp_2;  
    a = sp_4;  
    d = sp_3;  
    }  
    else  
    if(c < d){  
    a = sp_2;  
    b = sp_3;  
    c = sp_4;  
    d = sp_1;  
    }  
    else{  
    b = sp_4;  
    c = sp_3;  
    d = sp_2;  
    a = sp_1;  
    }  
    cout<<" Es treten an "<<a<<" gegen "<<b<<endl;  
    cout<<""<<endl;  
    cout<<" Die zweite runde bestreiten "<<c<<" gegen "<<d<<endl;  
    cout<<"-----------------End of Programm-------------------"<<endl;  
    
    system("PAUSE");  
    return EXIT_SUCCESS;  
    }
    

    Ich freue mich auf eure Antworten.
    Danke!



  • Nemercry schrieb:

    Also ich programmiere Java seit ca 1-2 Monate und wollte ein Programm schreiben, dass unter windows auführbar ist und deswegen hab ich c++ gewählt.

    Eh? 😕

    #include <cstdlib>
    #include <iostream>
    #include <string> // <---
    #include <ctime>  // <- fuer time
    
    using namespace std;
    using std::string;
    
    int main(int argc, char *argv[])
    {
      srand(time(0)); // fuer zufaellige Zufallszahlen
    
      // ...
    
      //char sp_1; // ein 'char' ist nur ein einzelnes Zeichen
      string sp_1;
      string sp_2;
      string sp_3;
      string sp_4;
    
      // ...
    

    Und schau dir getline an.

    Nebenbei bemerkt: schaff dir einen Spellchecker an...



  • Ja weiss nicht, vielleicht glaubt er dass Java Programm nicht unter Windows laufen...



  • Nunja, dass Programm sollte eigtl. einfach nur per Exe ausführbar sein.
    Jedoch weiß ich noch nicht, wie ich ein Java programm so hinbekomme, dass es unter Windows läuft.

    Sorry bin da auch nochnicht richtig drinne, bin noch Anfänger und Programmiere Java hauptsächlich für die Schule.
    ----------------------------------------------------------------------------------
    Wie nutze ich strand(time(0)); eigtl. richtig ?
    Ich bekomme den Fehler, dass ich das erst deklarieren soll.
    Könntet ihr mir da mal ein beispiel zeigen ?

    Wäre echt nett und ich danke für eure Hilfe 🙂

    Gruß Jannis



  • falls du den obigen Quelltext meinst:
    es heißt da srand und nicht strand
    Außerdem: hast du ctime inkludiert?



  • Ja habe ctime includiert hatte aber in einem tut gelesen, dass man
    <time.h> dafür bräuchte, habe das dann includiert und dann ging es
    wo ist denn der unterscheid zwischen

    #include <time.h>
    und
    #include <ctime>



  • Nemercry schrieb:

    Ja habe ctime includiert hatte aber in einem tut gelesen, dass man
    <time.h> dafür bräuchte, habe das dann includiert und dann ging es
    wo ist denn der unterscheid zwischen

    #include <time.h>
    und
    #include <ctime>

    #include <ctime> ist neu und man hat das so entschieden 🙄



  • Und um die ausführliche Erklärung noch zu ergänzen: Im Header ctime ist alles in den Namensraum std gewandert, dorthin wo die C++ Sachen wie std::vector, std::copy usw. auch liegen.



  • Ah ok, danke =).

    Soo nachdem ich das Programm erfolgreich beendet hatte, wollt ich es erweitern, so das es eine belibige Spieleranzahl benutzen kann.
    und mein Code sieht bis jetzt so aus:

    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <ctime>
    #include <time.h>
    
    using namespace std;
    using std::string;
    
    int main(int argc, char *argv[])
    {
    
    srand(time(0));
    
      string a,b,c,d;
    
      cout<<"Das hier ist der Enemyfinder 0.2 von Jannis Mahlitz!!"<<endl;
      cout<<""<<endl;
      cout<<""<<endl;
      cout<<"----------------------------------------------"<<endl;
    
      //string sp_1;
      //string sp_2;
      //string sp_3;
      //string sp_4;
    
    int j[50];  
    int x;
    cout<<"Bitte hier die Spieleranzahl eintragen!!!"<<endl;
    cin>>x;
    
    string sp[50]; // deklariert ein statisches array
    
    for(int i = 0;  i< x; i++)
    {
      //sp[i] = "Das ist eintrag nummer" + i;
            cout<<"Spielername Nummer "<<i<<" eingeben"<<endl;
                  cin>>sp[i]; 
    
    {
                  for(int i = 0;  i< x; i++)
              {    j[i] = (rand()%100);
    
    //-----altes script---------
      //cout<<"Spieler Nummer 1 heist ? "<<endl;
      //cin>>sp_1;
      //cout<<"Spieler Nummer 2 heist ? "<<endl;
      //cin>>sp_2;
      //cout<<"Spieler Nummer 3 heist ? "<<endl;
      //cin>>sp_3;
      //cout<<"Spieler Nummer 4 heist ? "<<endl;  
      //cin>>sp_4;
    
      //----------Random Funktion--------------------
       //a =  (rand()%100);
       //b =  (rand()%100);
       //c =  (rand()%100);
       //d =  (rand()%100);
      //-------------------Random Ende--------------
    //  if (a <=b)
    
      //      if (a < c)
    
        //          if (a < d){
            //         a = sp_2;
              //       c = sp_3;
                //     d = sp_1;
                  //   b = sp_4;
                   //  }
          //         else {
          //           c = sp_2;
            //         d = sp_1;
              //       b = sp_3;
                //     a = sp_4;  
                  //   }
    
    //        else
      //          if (c < d){
        //          a = sp_3;
          //        c = sp_4;
            //      b = sp_1;
              //    d = sp_2;
                //  }
    //          else{
      //           a = sp_4;
        //         b = sp_3;
          //       c = sp_2;
            //     d = sp_1;
              //   } 
    //  else
      //    if (b < c)
        //     if (b < d){
          //      b = sp_4;
            //    a = sp_3;
              //  c = sp_2;
                //d = sp_1;
                //}       
            // else{
             //    b = sp_1;
              //   c = sp_2;
               //  a = sp_4;
                // d = sp_3;
                 //}
     //     else
      //        if(c < d){
       //          a = sp_2;        
        //         b = sp_3;
         //        c = sp_4;
          //       d = sp_1;
           //      }
          //    else{
           //       b = sp_4;
            //      c = sp_3;
             //     d = sp_2;
              //    a = sp_1;
               //   }
      //cout<<" Es treten an "<<a<<" gegen "<<c<<endl;
     // cout<<""<<endl;
      //cout<<" Die zweite runde bestreiten "<<b<<" gegen "<<d<<endl;
     // cout<<"-----------------End of Programm-------------------"<<endl; 
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    Ich hab das alte Programm vorerst zur Orientierung als kommentar dringelassen.

    In dem alten Programm, habe ich jedem Spieler eine Zufallszahl zugewiesen, diese von klein nach groß geordnet und dann kamen so die Gegner heraus.
    Da ich hier nun mit Arrays arbeite, muss ich mit dem Bubblesort Algorithmus arbeiten um die Zahlen zu sortieren. Bisher verstehe ich jedoch noch nicht genau, wie dieser funktioniert und wo ich meine Werte eintragen kann.
    Vielleicht könnt ihr mir hier noch Mal unter die Arme greifen ?



  • Dann fangen wir noch mal ganz von vorne an ...

    Wenn du <ctime> inkludierst, brauchst du <time.h> nicht mehr zu inkludieren.

    Wenn du using namespace std verwendest, brauchst du using std::string nicht mehr.

    Das statische Array ist nicht ok. Was denkst du wohl, was passiert, wenn eine Zahl größer als 50 eingegeben wird? Aus diesem Grund nimmt man normalerweise ein dynamisches Array, d.h. std::vector.

    Es ist absolut überflüssig, daß du selbst einen Sortieralgorithmus implementierst. Die STL bietet soetwas bereits an (std::sort).



  • hmm achso ,ok danke



  • Hallo zusammen,

    15 Jahre später bin ich wieder auf diesen Beitrag gestoßen.
    Und hui, ui ui - respekt für den langen Atmen - damals waren mir viele Bestandteile des Programmierens noch unbekannt.
    Nichts desto trotz habe ich mit eurer Hilfe den "Enemyfinder 0.2" fertig gestellt - wofür auch immer dieser gut ist. 🙂

    Heute blicke ich auf eine langjährige Erfahrung im Programmieren mit unterschiedlichen Sprachen zurück: Java, C++, PHP, Python und C#. Es gab auch mal Ausreißer und Skriptsprachen - aber heute bin ich nur noch C# und /bin/bash treu!
    Ihr habt maßgeblich dazu beigetragen, indem ihr meine ersten Gehversuche unterstützt habt.

    In diesem Sinne: vielen Dank dafür und macht weiter so - die Welt braucht fähige Entwickler !

    Hinweis: zur besseren Lesbarkeit habe ich meine Beiträge moderiert. Inhaltlich sind sie aber noch gleich.


Log in to reply