c++ wichteln

BlaZe_Andre'

Cadet 3rd Year
Registriert
Dez. 2007
Beiträge
58
hey leute...wollte gerne n wichtel programm mit c++ schreiben.
habe nur das prob, dass ich die namen zufällig zuordnen will, nur klappt das bei mir durch n random nicht...habe auch schon berücksichtigt, dass ich den namen zahlen zuweisen muss ;).
kann mir da einer weiterhelfen? ;)

mein quelltext sieht im mom so aus:


//---------------------------------------------------------------------------
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>

//---------------------------------------------------------------------------

int Anzahl, Lauf, Zufallszahl;
char Name[40][101];
const Max = 100;
const Min = 3;
const MinAnzahl = 1;
const MaxAnzahl = 40;
int posx;
int posy();

//---------------------------------------------------------------------------
int main()
{

printf ("\n");
printf ("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n");
printf ("° Dieses Programm ordnet jeder eingegebenen Person eine °\n");
printf ("° weitere zu, die von der davor stehenden beschenkt °\n");
printf ("° werden soll °\n");
printf ("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°\n");
printf ("\n");

printf ("Bitte geben Sie die Anzahl der Personen ein (min:3 | max: 100): \n");
int posx = wherex ();
int posy = wherey ();


do
{
fflush(stdin);
gotoxy(posx,posy);
clreol();
scanf ("%i",&Anzahl);
printf ("\n");
printf ("\n");
} while(Anzahl<Min || Anzahl>Max);

for (Lauf=1; Lauf<=Anzahl; Lauf++)
{
printf ("Bitte geben Sie den %i. Namen ein: ",Lauf);
fflush(stdin);
scanf("%c",&Name);
} while (Lauf<=Anzahl);


int i = rand()%Anzahl;
srand(Anzahl);
Zufallszahl = rand(Anzahl);





printf ("\n\n");
system("pause");
return 0;
}
 
Zuletzt bearbeitet von einem Moderator: (Bitte künftig Mehrfachpostings vermeiden. ;))
srand() initialisiert den Zufallszahlengenerator. Sprich du erhälst für jede Zahl, die du srand übergibst eine andere Zahlenreihenfolge.
Du Übergibst aber die Anzahl der Teilnehmer, wodurch natürlich immer die gleichen Teilnehmer miteinander wichteln.
Initialisierte srand am besten mit time(). Also srand(time(0));. Dann erhälst du auch "echte" Zufallszahlen.

Achja: Für time() brauchst du die time.h. Und auch wenn du es häufig liest: Verwende nicht NULL sondern 0 oder 0L. NULL ist nicht auf jedem System gleich NULL ;)

Ganz abgesehen davon schreibst du C und kein C++ ;) Nur so zur Information.

Ansonsten ein paar Tips:
1. Du deklarierst alle Variablen global. Tu das nicht. Eine Laufvariable für eine for-schleife zB brauchst du NUR in der for-schleife, deklariere sie auch nur dort.

2. Wenn du Variablen deklarierst dann initialisiere sie auch, sprich weise ihnen SOFORT einen Wert zu und sei es einfach 0 oder "".

3. const Max = 100; Du weist Max keinen Typ zu. Der Code wird so nicht kompilieren. Richtig wäre const int MAX = 100;

4. Schreibe konstanten all-uppercase. nicht const int Max sondern const int MAX. Dann merkst du beim verwenden im Code schneller welche Variable nun const ist und welche nicht.

5. Und zu guter Letzt: Nenne deine Lauf-Variable nicht "Lauf" sondern i und j. Dann weiß jeder Programmierer was gemeint ist und muss nicht erst überlegen ;)
 
Zuletzt bearbeitet:
jetzt sieht mein quelltext so aus:

//---------------------------------------------------------------------------
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
#include <time.h>

//---------------------------------------------------------------------------

int ANZAHL, i, ZUFALLSZAHL;
char NAME[40][101];
int POSX;
int POSY;
const int MAX = 100;
const int MIN = 3;
const int MINANZAHL = 1;
const int MAXANZAHL = 40;

//---------------------------------------------------------------------------
int main()
{

printf ("\n");
printf ("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°°°°°°°°°°°°°°\n");
printf ("° Dieses Programm ordnet jeder eingegebenen Person eine °\n");
printf ("° weitere zu, die von der davor stehenden beschenkt °\n");
printf ("° werden soll °\n");
printf ("°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°°°°°°°°°°°°°°°°\n");
printf ("\n");

printf ("Bitte geben Sie die Anzahl der Personen ein (min:3 | max: 100): \n");
int POSX = wherex ();
int POSY = wherey ();


do
{

fflush(stdin);
gotoxy(POSX,POSY);
clreol();
scanf ("%i",&ANZAHL);
printf ("\n");
printf ("\n");
} while(ANZAHL<MIN || ANZAHL>MAX);

for (i=1; i<=ANZAHL; i++)
{

printf ("Bitte geben Sie den %i. Namen ein: ",i);
fflush(stdin);
scanf("%c",&NAME);
} while (i<=ANZAHL)


srand(time(0));

int i = rand()%ANZAHL;
srand(ANZAHL);
ZUFALLSZAHL = rand(ANZAHL);





printf ("\n\n");
system("pause");
return 0;
}



nur zeigt der compiler mir die fehler in den zeilen von rand an...wie müsste dass den da aussehen?
 
1. Poste deine Fehlermeldungen, wenn du welche kriegst ;)

2. Schreibe KONSTANTEN all-uppercase. Nicht alle Variablen. Wie wollen sie ja unterscheiden können.

3. Du deklarierst alle deine Variablen immernoch Global... Ist nicht Sinnvoll und auch nicht nötig.

4. Packe deinen Code hier im Forum am besten in
Code:
-Tags.


Was random angeht: Als erste initialisiert du mit srand richtig deinen "Zufallsgenerator". Und dann verwendest du auch rand richtig.
[CODE]srand(time(0));
int i = rand()%Anzahl;
i ist jetzt eine Zufallszahl von 0 bis (Anzahl - 1). Was du danach machst versteh ich nicht... srand nochmal aufzurufen hat keinen Sinn. und rand() erfordert eigentlich keinen Parameter (daher vielleicht die Fehlermeldung).

Siehe auch: http://www.forumdeluxx.de/forum/archive/index.php/t-63106.html

Erster Eintrag bei Google!

so long
 
Zuletzt bearbeitet:
Zurück
Oben