Ich möchte ein C-Programm schreiben, wo ich ein Array von 10 Zeichenfolgen habe, wobei jede Zeichenfolge das Kennzeichen des am Punkt geparkten Autos bezeichnet. Ein Spot wird zufällig ausgewählt und wenn er leer ist, wird eine zufällige Nummernschildnummer erzeugt und diesem Spot zugewiesen, und wenn er besetzt ist, wird der Spot geräumt und das Nummernschild wird gelöscht. Allerdings geht das Programm in eine Endlosschleife, was ich will, aber es druckt keine Anweisungen, die ich geschrieben habe, um das Programm zu debuggen. Der Code lautet wie folgt:C-Programm für Park-Simulation keine Ausgabe geben
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <stdint.h>
char * generateLicense()
{
srand((unsigned)time(NULL));
char const *code[] = {"AN","AP","AR","AS","BR","CG","CH","DD","DL","DN","GA","GJ","HR","HP","JH","JK","KA","KL","LD","MH","ML","MP","MN","MZ","NL","OD","PB","PY","RJ","SK","TN","TR","TS","UK","UP","WB"};
char const *alphabets[] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
char const *numbers[] = {"0","1","2","3","4","5","6","7","8","9"};
char *licensePlate = (char *)malloc(100*sizeof(char));
strcpy(licensePlate,code[rand()%36]);
strcat(licensePlate,"-");
strcat(licensePlate,numbers[rand()%10]);
strcat(licensePlate,numbers[rand()%10]);
strcat(licensePlate,"-");
strcat(licensePlate,alphabets[rand()%26]);
strcat(licensePlate,alphabets[rand()%26]);
strcat(licensePlate,"-");
strcat(licensePlate,numbers[rand()%10]);
strcat(licensePlate,numbers[rand()%10]);
strcat(licensePlate,numbers[rand()%10]);
strcat(licensePlate,numbers[rand()%10]);
return licensePlate;
}
int main()
{
char *messagebody = (char *)malloc(100*sizeof(char));
char *licensePlate = (char *)malloc(100*sizeof(char));
char *currentSpot = (char *)malloc(10*sizeof(char));
char *by = ", by: ";
char *client = "From client 1, ";
char *spots[] = {"00-00-00-0000","00-00-00-0000","00-00-00-0000","00-00-00-0000","00-00-00-0000","00-00-00-0000","00-00-00-0000","00-00-00-0000","00-00-00-0000","00-00-00-0000"};
int spot;
printf("variables declared\n");
srand((unsigned)time(NULL));
while(1)
{
printf("in while loop\n");
//messagebody = "";
//licensePlate = "";
spot = rand()%10;
//currentSpot = "";
sprintf(currentSpot, "%d", spot);
printf("%s",currentSpot);
strcpy(messagebody,client);
printf("%s",messagebody);
if(spots[spot] == "00-00-00-0000")
{
printf("%s",messagebody);
strcpy(licensePlate, generateLicense());
printf("%s",licensePlate);
strcpy(spots[spot], licensePlate);
strcat(messagebody,"spot occupied: ");
printf("%s",messagebody);
strcat(messagebody,currentSpot);
printf("%s",messagebody);
strcat(messagebody,by);
printf("%s",messagebody);
strcat(messagebody,licensePlate);
printf("%s",messagebody);
}
else
{
printf("%s",messagebody);
strcpy(licensePlate, spots[spot]);
strcpy(spots[spot],"00-00-00-0000");
strcat(messagebody,"spot vacated: ");
printf("%s",messagebody);
strcat(messagebody,currentSpot);
printf("%s",messagebody);
strcat(messagebody,by);
printf("%s",messagebody);
strcat(messagebody,licensePlate);
printf("%s",messagebody);
}
printf("%s",messagebody);
sleep(5);
}
return 0;
}
Ich habe die Anweisungen, die ich geschrieben habe, um das Programm zu debuggen. Was mache ich hier falsch?
Auf den ersten Blick: Bitte rufen Sie 'srand' nur einmal am Anfang von' main'. Wenn Sie es wiederholt aufrufen, wird es nicht "zufälliger". Im Gegenteil, mit einer Sekunde Granularität setzen Sie den Seed immer wieder auf den gleichen Wert zurück. –
[Bitte lesen Sie diese Diskussion darüber, warum nicht den Rückgabewert von malloc() und family in C ..] (https://stackoverflow.com/q/605845/2173917) –
auf welchem System/Betriebssystem führen Sie Ihre Programm? hast du versucht, die printf-anrufe zu reduzieren und die schleifenzeit zu erhöhen? – user3336433