funktionen werden einfach übersprungen

xbugsx

Grünschnabel
hallo!

ich habe zum üben ein kleines sortierprogramm geschrieben.Ich erzeuge mit meiner funktion init() eine mit define festgelegte anzahl zMAX an zufälligen integer zahlen.diese gebe ich mit einer weiteren funktion write() aus.Danach sortiere ich diese zahlen mit sort() und messe dazu die zeit, wie lange das sortieren braucht.
da ich aber nicht immer im quelltext den wert für zMAX verändern will,habe ich eine neu variable long deklariert und lese zu begin des programmes die einegebene zahl mit scanf() ein.
Seitdem ich das gemacht habe, kann ich die anzahl der zu erstellenden zahlen zwar eingeben und die return-taste zum bestätigen drücken,danach wird aber keine funktion mehr ausgeführt.lediglich die printf() befehle in der main()-funktion werden ausgegeben und das programm ist beendet.
ich habe die variable anzahl als globale variable deklariert und später dann in der main funktion.war immer noch dasselbe problem.daraufhin dachte ich es läge daran das die anzahl eine long variable und die funktionen int sind.danach ging dann gar nichts mehr

wäre nett wenn mir jemand helfen könnte.danke
 
Das ist der Code mit dem die Funktionen, die übersprungen werden! 3 neue Zeilen und alle anzahl variablen müssten mit zMAX ausgetauscht werden, um den Code zu erhalten, derfunktioniert.

Code:
#include <stdio.h>
#include <stdlib.h>
#include "randomize.h"

//*definiert die Größe des Arrays*/
#define zMAX 100000

long anzahl=0;				//neu im Code
int zahl[zMAX],i=0,j=0;

int main()
{
	double time1, time2, gtime;

	printf("Wieviel Zahlen sollen erstellt werden (max. 100000): ");    //neu im Code
	scanf("%D\n",&anzahl);									    //neu im Code
	printf("Drücke RETURN zum initiieren der rand-Zahlen\n");
	getchar();                                                                                                  //wartet
	init();											// wird übersprungen
	write();											// wird auch übersprungen
	printf("Drücke RETURN zum Sortieren!\n");		/wird ausgegeben
	getchar();									//wird übersprungen
	time1 = (get_sec() * 1000) + (get_usec() / 1000); 	//erste Zeit
	sort();										//wird übersprungen
	time2 = (get_sec() * 1000) + (get_usec() / 1000);	//zweite Zeit
	write();										//wird übersprunegn
	gtime = time2 - time1;							//Differenz der beiden Zeiten
	printf("Zeit zum Sortieren: %5.4f sec\n", (gtime /1000));  //wir auch ausgegeben

}

/*erstellt die gewisse anzahl an zufälligen  zahlen*/
int init()
{
	for(i=0 ;i < anzahl;i++)
	{
		zahl[i] = randomize(0,200);
	}
}

/* hier werden die zahlen mit einer langsamen sortier-methode sortiert*/
int sort()
{
	for(i=0; i < anzahl; i++)
	{
		for(j=0; j < anzahl ;j++)
		{
			if(zahl[j]>zahl[j+1])
			{
				swap();
			}
		}
	}
}

/*hier werden die zahlen ausgetauscht*/
int swap()
{
	int tmp;

	tmp =  zahl[j];
	zahl[j] = zahl[j+1];
	zahl[j+1] = tmp;
}

/*mit write() werden alle zahlen ausgegeben*/
int write()
{
	for(i=0;i<anzahl;i++)
	{
		printf("%d: %d\n", i, zahl[i]);
	}
}


Das ist die Randomize-Header-Datei.
Code:
#include <sys/time.h>
#include <stdlib.h>

/*Funktion zum erhalten der Mikrosekunden*/
int get_usec()
{
	struct timeval tv;
	struct timezone tz;
	gettimeofday(&tv, &tz);
	return(tv.tv_usec);
}

/*Funktion zum erhalten der Millisekunden*/
int get_sec()
{
	struct timeval tv;
	struct timezone tz;
	gettimeofday(&tv, &tz);
	return(tv.tv_sec);
}

/*erstellt viele zufällige Zahlen in kurzer Zeit von einem Minimum bis zu einem Maximum*/
int randomize(const int MIN,const int MAX)
{
	int ran,tmp,tmp2;

	srand(get_usec());
	ran = rand() % MAX;
	if(ran < MIN)
	{
		tmp = MAX - MIN;
		tmp2 = MIN - ran;
		if(tmp2 < tmp)
		{
			ran += tmp;
		}
		else
		{
			ran += tmp2;
		}
	}
	return(ran);
}

Ich hoffe das reicht zum ausprobiere.Ich kompiliere die Datei mit gcc Version 3.2.2
Danke schonmal.
 
Also mal ein Tip am Rande , hast du schon darüber nachgedacht wieso du nur die printf Sachen siehst ? z.B.: weil anzahl Null ist
Wenn du nicht die möglichkleit eines Debuggers hast kannst du dir mit den printfs behelfen und dir z.B.: den Wert den anzahl gerade nach dem einlesen hat.

kann es nicht beschören, aber ich glaube du darfst dieses \n in
Code:
scanf("%D\n",&anzahl);
nicht machen !

Ansonsten , anzahl ausgeben , nachdenken und reagieren ;-)
 
Ich habe das Problem gelöst.
Wenn ich bei scanf() ein kleines %d und die anzahl mit long deklariere kommt Segmentation fault.Ist ja klar.Da man long mit %D einliest.Aber mit dem großen %D hat das Programm anzahl immer auf 0 gelassen.
Ich habe jetzt einfach
Code:
long int anzahl;
deklariert und bei scanf()
Code:
scanf("%d", &anzahl);
geschrieben.Jetzt geht das mit dem eintippen meiner beliebigen Größe.
Danke für eure bemühungen.
 
Zurück