Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Haufenweise undefinierbare Zeichen am Array (C++)

Moin.

Nur mal so zur Übung hab ich das folgene kleine Progrämmchen im C++ geschrieben:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;

int main()
{
 int staben;
 char vok[6] = {'a','e','i','o','u','y'};
 char kons[19] = {'b','c','d','f','g','h','j','k','l','m','n','p','r','s','t','v','w','x','z'};
 int i = 0;
 int zuf;
 int exit = 0;
 
 while(exit != 1)
 {

  cout << "Wie lang soll der Nick denn sein? (In Zeichen, 2-25): ";
  cin >> staben;
  cout << endl;

  if(staben > 25 || staben < 2)
  {
   cout << "Sorry, nur 2 bis 25 Zeichen" << endl << endl;
  }
  else
  {
   char nick[staben];
   while(i <= staben)            
   {
   
    if(i % 2 == 0)
    {
     srand(time(NULL));
     zuf = rand() % 19;                 nick[i] = kons[zuf];              }
    else
    {
     srand(time(NULL));
     zuf = rand() % 6;                 nick[i] = vok[zuf];              }

    i = i+1;
   }
   
   cout << nick << endl;
   exit = 1;
  }


 }
return 0;
}


Das Problem is nur, dass erstens, wenn ich das Programm mit g++ compiliere und ausführe immer hinter dem generierten Nick noch diese 13 weiteren Zeichen ausgegeben werden: "(óÿ¿×«@À«Hóÿ¿"

Und zweitens, dass der Computer so schnell ist, dass er den Nick immerhalb von viel weniger als einer sekunde erzeugt, sodass man mit srand(time(NULL)) keine änderung der Zufallszahl von rand() zustande bekommt.
Dabei entstehen dann dur solche Sachen:
gigigi
bububububu
hyhyh
hihihihihihihihih
bobo

Das ist total langweilig. Gibts da nich noch was wie Millisekunden seit 1970 oder so?
Und wieso Muss ich dem time() immer NULL übergeben, damit was rauskommt?

Also drei Fragen nach der Wichtigkeit geordnet.  ;D

VDiV!

Antworten zu Haufenweise undefinierbare Zeichen am Array (C++):

Also:
Die Zeichen nach deinem Namen liegen wahrscheinlich daran, dass dein String nicht null-terminiert ist.
Dabei fällt mir ein, dass du eigentlich eh besser die std::string-klasse verwenden solltest als so ein komisches Array...
Das mit den gleichen Zufallszahlen lässt sich lösen, indem du eben nicht vor jedem Buchstaben den Zufallszahlen-Generator wieder mit der (immer noch gleichen) aktuellen Zeit inititialisierst, sondern das am Programmanfang tust...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Das mit der Standard String-klasse hat bei mir nich gefunzt. Da kam dann immer folgendes beim Ausführen:
. Also nichts.

Das mit dem Zufallsgenerator durfte aber klappen. Danke!  :)

string nick;
...
nick += vok[zuf]
...

cout << nick;

sollte eigentlich funktionieren.

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Wie jetzt?
Also das werd ich mal ausprobieren.
Ich hatte vorher in der Schleife:

nick = vok[zuf];

Ungefähr so

 string nick;
  while(i <= staben)            
  {
   
    if(i % 2 == 0)
    {
      srand(time(NULL));
      zuf = rand() % 19;
      nick += kons[zuf];
    }
    else
    {
      srand(time(NULL));
      zuf = rand() % 6;
      nick += vok[zuf];
    }
    i = i+1;
  }

Und dann solltest du dir noch überlegen, ob du auch zufällig mal passende Konsonanten nebeneinander erlaubst, oder doppel-vokal-combos oder sowas ;-)

Achja, random seed setzen vor die Schleife

 srand(time(NULL));
  string nick;
  while(i <= staben)          
  {
 
    if(i % 2 == 0)
    {
      zuf = rand() % 19;
      nick += kons[zuf];
    }
    else
    {
      zuf = rand() % 6;
      nick += vok[zuf];
    }
    i = i+1;
  }

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Zu den Millisekunden: Mit PHP kannst du statt time() auch microtime() nehmen. Vielleich kennt C das ja auch?


« Cookie in php. aber WIE???Signal an Parallelport, Frequenz steigern »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
C++
C++ ist eine von der ISO standardisierte Programmiersprache und eine erweiterte Form von C zur objektorientierten, generischen und prozeduralen Programmierung. Weitestgeh...

Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...

Unicode
Unicode ist ein international anerkannter Standard, der als universeller Zeichencode ("Universal Code") dient und durch das Unicode-Konsortium entwickelt und verwaltet wi...