C return von funktion gibt falschen wert wieder:(

hoschkopf

Newbie
Dabei seit
Nov. 2010
Beiträge
1
hallo,
beschäftige mich gerade mit c und komme nicht weiter. meine funktion soll eine textdatei einlesen und den höchsten wert ausgeben. habe eine textdatei "matrix.txt" die folgenden aufbau hat:

Code:
11 55 25 35 45
5 7 9 3 2
0 4 689 7 2
7 5 37 3 0
6 87 7 6 6
und die funktion:

Code:
float EinlesenUndMaximumAusgeben(char *name) {
	int zeile, spalte, a, j;
	float matrix[5][5], max = 0;
	FILE *datei;
	datei=fopen(name, "r");
	if(datei != NULL) {
		for(zeile = 0; zeile < 5; zeile++) {
				float spalte[5];
				fscanf(datei, "%f %f %f %f %f\n", &spalte[0], &spalte[1], &spalte[2], &spalte[3], &spalte[4]);
				
				for(j=0;j<5;j++) {
					if(spalte[j] > max) {
						max = spalte[j];
						printf("zahl %f\n", max);
					}
					
				}
		
			
		}
		fclose(datei);
	}
	printf("maximum: %f\n", max); // zum testen eingebaut.
	return(max);
}
die ich mit



Code:
float maximum;
	maximum = EinlesenUndMaximumAusgeben("matrix.txt");
	printf("maximum funktion aufgabe 2: %f\n", maximum);
aufrufe. nur bekomme ich keinen wert ausgegeben. habe dann zum testen die zweitletzte zeile eingebaut und bekomme auch den richtigen wert. aber im return-wert ist dann ein falscher wert. ohne die zweitletzte zeile ist der wert 0.0000

was mache ich falsch?
 

GoDslayer

Cadet 1st Year
Dabei seit
Jan. 2009
Beiträge
11
Du hast entweder den falschen Datei namen angegebn oder die Datei liegt im Falschen Ordner (nicht bei der .exe datei oder falls du Visual Studio verwendest da ist das standard Ausführungsverzeichnis der Projektordner). Ansonsten funktioniert deine Funktion.
 
S

samotyr

Gast
Hallo,
ich kann die Antwort von GoDslayer bestätigen. Das Programm macht was es soll:
Code:
samotyr@host:~/test$ gcc -o Test main.c 
samotyr@host:~/test$ ./Test
zahl 11.000000
zahl 55.000000
zahl 689.000000
maximum funktion aufgabe 2: 689.000000
Dass dir die Funktion 0.0000 zurück liefert ist liegt höchstwahrscheinlich daran, dass die Datei "matrix.txt" nicht im gleichen Ordner wie ausführbare Programmdatei deiner Aufgabe liegt und dein Programm sie daher nicht finden kann. Denn du initialisiert den Wert ja am Anfang der Funktion "EinlesenUndMaximumAusgeben" mit 0 (übrigens solltest du 0f nehmen statt 0, da es ein Gleitkommazahl ist) und 0 liefert sie dir zurück, wenn die Datei nicht geparst werden konnte.
Code:
samotyr@host:~/test$ rm matrix.txt 
samotyr@host:~/test$ ./Test
maximum funktion aufgabe 2: 0.000000
Mit einer kleinen Änderung im Code, kannst du dir diesen Umstand auch ausgeben lassen:
Code:
float EinlesenUndMaximumAusgeben(char *name) {
	int zeile, spalte, a, j;
	float matrix[5][5], max = 0;
	FILE *datei;
	datei=fopen(name, "r");
	if(datei != NULL) {
		for(zeile = 0; zeile < 5; zeile++) {
				float spalte[5];
				fscanf(datei, "%f %f %f %f %f\n", &spalte[0], &spalte[1], &spalte[2], &spalte[3], &spalte[4]);
				
				for(j=0;j<5;j++) {
					if(spalte[j] > max) {
						max = spalte[j];
						printf("zahl %f\n", max);
					}
					
				}
		
			
		}
		fclose(datei);
	} else{
[B]	 printf("Konnte die Datei %s nicht finden\n",name);[/B]
	}
	return(max);
}
Ausgabe:
Code:
samotyr@host:~/test$ ./Test
Konnte die Datei matrix.txt nicht finden
maximum funktion aufgabe 2: 0.000000

Kleiner Tipp am Rande: Fragen zu Schul-/Studiumaufgaben sind hier nicht gerne gesehen.
 
Top