![]()  | 
	
		
 Fehlersuche in C 
		
		
		Hallo zusammen ich bin dabei mich auf eine kommende Klausur vorzubereiten. In diesem Programm sollen 10 Fehler sein, wovon ich bereits 9 gefunden habe. Daher erscheinen also auch manche Stellen als fehlerfrei, also bitte nicht wundern. Nun suche ich allerdings schon hartnäckig seit einer Weile den 10. Fehler. Ich vermute folgende Geschichte, p ist ja als Zeiger deklariert, in einer Zeile wird dann allerdings p=a; gesagt, der Compiler meckert aber nicht, und in der Zeile mit dem 
	PHP-Code: 
	
		
		Liebe Grüße Marcel PHP-Code: 
	
		
		 | 
		
 Zitat: 
	
 Funktionen können in C sehr verschachtelt, werden. Daher passt das p++ auch. Das bedeutet, dass zuerst scanf ausgeführt wird und danach p erhöht wird. Bei ++p wäre es umgekehrt. Was meiner Meinung nach falsch ist: Bei n=0 oder n=1 gibt es eine Division durch Null.  | 
		
 Das Programm ist dazu gedacht um den Mittelwert und die Streuung von Messwerten zu errechnen, wobei n die Anzahl der Messwerte darstellt. 
	Die Formel für die Streuung steht so in der Form in guten Messtechnik Büchern. Wenn n=0 oder n=1 wäre ja sinnlos, aus keinem Messwert kann ich auch keinen Mittelwert und keine Streuung bilden und aus einem Messwert auch nicht. Das ist nicht der Fehler.  | 
		
 Zitat: 
	
 Zitat: 
	
  | 
		
 p = a; // der zeiger zeigt auf das erste feld des arrays  
	p = &a[0] // wäre eindeutiger gewesen, ist aber so völlig richtig scanf("%lf",p++); // mit p++ wird der zeiger nach aufruf von scanf ein feld (also die größe eines doubles) weitergeschoben man hätte auch scanf("%lf",&a[i]); schreiben können aber nen fehler kann ich leider auch nicht finden ^^' aber das mit dem n = 0 sollte man wirklich abfangen  | 
		
 copy & past des Quelltextes in die DEV-C++ IDE (freier C++ Compiler hier [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...])  
	- Compiler & Linker: keine Fehler - Eingabe Werte (Anzahl Werte <31) o.k => Ausgabe: NICHTS!!!! Modifikation 1: Hilfsvariable temp[80] definiert sowie 2x gets(temp) (Einlesen eines leeren Strings mit "CR" = Enter): 1) s1=s2=0;gets(temp); 2) printf("\nStreuung = %lf",str);gets(temp); => es wird nur 1x CR nach Ausgabe von Mittelwert und Streuung verlangt => wird das 1. gets(temp) auskommentiert ("// gets(temp)" erfolgt ebenfalls KEINE Ausgabe und KEIN Stop Modifikation 2: zusätzliches gets(temp) nach Meldung "Die Dimension ist zu gross") => kein Stop bei Eingabe > 30 Modifikation 3: scanf("%lf",a[i]) statt (auskommentiertem) scanf("%lf",p++) => Programmabsturz Seltsam ist weterhin, daß im Debug die jeweils aktuellen Werte a[],s1,s2,mw,str,*p bei zeilenweiser Ausführung nicht angezeigt werden können (Watch-Funktion) :confused: :(  | 
		
 @lds17pl 
	Ich verstehe nicht, warum es bei dir nicht funktionieren soll. Läuft mit mingw und vc++ ohne Modifikationen. Bei Mod3 musst du eine Referenz angeben: Code: 
	scanf("%lf",&a[i]) | 
		
 Richtig! :T  die Referenz fehlt bei scanf(...) 
	aber darum geht es im Grunde nicht - ich versuchte den 10. Fehler einzugrenzen :( Es bleibt :confused:  | 
		
 Für mich ist es ein schwerer Fehler eine Division durch Null zuzulassen. 
	 | 
		
 Zitat: 
	
  | 
		
 Zitat: 
	
 Ob dies Vorschrift ist, weiß ich aber auch nicht genau...  | 
		
 Zitat: 
	
  | 
| Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr. | 
	Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.