Lazy BNF / EBNF Help Messages
committer: Markus Bröker <mbroeker@largo.homelinux.org>
/**
* test/demos/tree.c
* Copyright (C) 2008 Markus Broeker
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define GETRANDOM(max) (1+(int)((float)max*rand()/RAND_MAX+1.0))
struct T {
int data;
struct T *next;
};
typedef struct T T;
T *make_list (int elements, int rand_max)
{
int i;
T *t, *first = NULL;
srand (time (NULL));
if ((t = malloc (sizeof (T))) == NULL) {
perror ("MALLOC");
return first;
}
t->data = GETRANDOM (rand_max);
t->next = NULL;
first = t;
for (i = 1; i < elements; i++) {
if ((t->next = malloc (sizeof (T))) == NULL)
break;
t->next->data = GETRANDOM (rand_max);
t = t->next;
}
t->next = NULL;
return first;
}
int main (int argc, char **argv)
{
T *t, *next;
if (argc != 3) {
printf ("Usage: %s <elements> <rand_max>\n", argv[0]);
return EXIT_FAILURE;
}
t = make_list (atoi (argv[1]), atoi (argv[2]));
while (t) {
printf ("%d\n", t->data);
next = t->next;
free (t);
t = next;
};
return EXIT_SUCCESS;
}