![]() |
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 12:00 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.