Anfängerfrage zu Borland C++BuilderX-Warnhinweis
-
Hi,
ich bin gerade dabei, mir die Programmierung mit C/C++ beizubringen, und habe folgendes Problem:
Nach dem Build meiner Programme (unten kleines Beispiel) bekomme ich immer den Hinweis
"Dateiname.c": W8070 Function should return a value in function main at line 37"
('line 37' ist dabei die Codezeile mit der abschließenden geschweiften Klammer)
Nach Betätigung von F9 ("Run Project") hängt sich die IDE nach Anzeige des Pfades zur *.exe-Datei 'auf'. Sie muss hinterher jedesmal manuell 'terminated' werden, ohne dass die vom Programm zu generierenden Konsolenanzeigen je angezeigt worden wären?!?
///////////////////////////////////////////////BEISPIEL///////////////////////// # include <stdio.h> # include <stdlib.h> main() { int z, a, n, x; printf("Zu teilende Zahl/'Zaehler': "); scanf("%d", &z); printf("Teiler: "); scanf("%d", &n); printf("Anzahl Nachkommastellen: "); scanf("%d", &a); x = z/n; //Division OHNE Nachkommastellen printf("Ergebnis der Division: %d.", x); for( ; a > 0; a = a-1) { z = 10*(z-n*x); if(z==0) break; x = z/n; printf("%d", x); } printf("\n"); } ////////////////////////////////////////////////////////////////////////////////Unter anderen IDE's - z.B. Bloodshed's Dev C++ - laufen die Programme dagegen problemlos?!?
Besten Dank im voraus

Edit:
Bitte die Code-Tags benutzen. Danke!
-
Hallo
versuch doch einfach das mal zu uebersetzten
(was sollte deine Funktion ?)MfG
Klaus
-
Der tiefere Sinn der Funktion ist eigentlich nur der, sich mit der Logik des Programmierens/der Programmiersprache C vertraut zu machen (hoffe, das war jetzt nicht zu pathetisch ;-)).
Die Funktion ist das Ergebnis meiner Überlegungen zu einer Aufgabe aus einem C/C++-Buch (Kaiser/Kecher, "C/C++ - Von den Grundlagen zur professionellen Programmierung", Galileo Computing, 2. Auflage, Bonn 2002; anspruchsvoll bis akademisch überladen [man merkt dem Schinken an, dass sein Verfasser darunter leidet, "nur" FHS-Professor zu sein], insgesamt aber wohl o.k.; darum bitte nicht die üblichen wohlgemeinten Hinweise wie: Galileo gibt nur Sch...bücher 'raus pp. - hatte ich alles schon).
Mein derzeitiger Wissensstand lt. Buch ist der, dass das Ergebnis einer arithmetischen Operation, an der nur ganzzahlige Operanden beteiligt sind, *immer* auch eine ganze Zahl ist. Die Aufgabe lautete, sich eine Funktion zu überlegen, die gleichwohl das Ergebnis einer Division bis zu einer frei wählbaren Zahl von Nachkommastellen angibt. Das tut meine Funktion (z.B. unter Bloodshed's Dev-C++), nur leider nicht unter meiner Personal Edition des Borland C++BuilderX, die sich stattdessen in eine Endlosschleife zu verabschieden scheint, sobald ich das Programm aufrufe.
Nur zur Klarstellung: ich suche nur die Ursache des 'Hängers', ich suche NICHT nach eleganteren, schöneren, intelligenteren pp. Lösungen für die gestellte Aufgabe (, für die es geeignetere Befehle geben mag, auf die ich beim Durchackern des Buches dann vermutlich auch noch stoße). 'Meine' Lösung ist mathematisch i.O., damit kann ich gut leben.
So oder so: bis hierhin vielen Dank für Dein Interesse, für den Fall einer Idee wegen meines C++BuilderX-Problems auch dafür besten Dank (im voraus)!
Snoopy
-
Das mit der Endlosschleife passiert nur im 'Run-Mode' (, den ich hier jetzt einfach mal so nenne; die 'Konsolenanzeige' im untersten Teilfenster des C++BuilderX endet mach Anzeige des Programmpfades "E:\Kaiser\Kap3\ZaehlerNenner\windows\Debug_Build\ZaehlerNenner.exe"); im 'Debug-Mode', bei dem sich stattdessen die Konsole selbst öffnet, funktioniert das Programm ebenfalls tadellos?!?
-
Klaus meinte mit der Frage was die Funktion wohl sollte eigentlich eher, was dir der Compiler genau sagt, was die Funktion sollte (sollen = should (engl) )
-junix
-
Habe diese Funktion gerade ausprobiert also bei mir funzt sie.
[Editiert]
Versuche mal C++ Builder 6 damit sollte es gehen zumindest bei mir.
[/Editiert]
-
Hallo!
Wäre es möglich, daß er deswegen meckert, weil die main() Funktion keinen Rückgabewert liefert? Im Standard ist ja eigentlich festgelegt daß es
int main() heißt. Und C BuilderX ist ja entwickelt um ganz nah am Standard zu sein. Versuch doch malint main() { .... return 0; }Viel Erfolg...
-
junix schrieb:
Klaus meinte mit der Frage was die Funktion wohl sollte eigentlich eher, was dir der Compiler genau sagt, was die Funktion sollte (sollen = should (engl) )
Vielleicht kann Klaus dazu selbst noch einmal etwas sagen. Deine Interpretation hilt (mir) leider nicht weiter, und zwar nicht weil ich nicht wüsste was 'should' heißt
. Du meinst ja wahrscheinlich nicht den eingangs zitierten Warnhinweis:'Function [b]should[/] return a value in function main at line 37'
, der bedeutet, dass die Funktion in Zeile 37 (= die Zeile mit der abschließenden geschweiften Klammer, s.o.) einen Wert zurückgeben sollte!? Lt. Visitenkarte ist Klaus Softwareentwickler; das dürfte er sich also selber übersetzen können.
Falls Du ein anderes 'should' meinst und ich hier daneben liege, hilf mir ggf. noch mal auf die Sprünge! (Danke im voraus!)
Wäre es möglich, daß er deswegen meckert, weil die main() Funktion keinen Rückgabewert liefert? Im Standard ist ja eigentlich festgelegt daß es
int main() heißt. Und C BuilderX ist ja entwickelt um ganz nah am Standard zu sein. Versuch doch mal...Auch das hatte ich schon - ohne Erfolg - probiert. Trotzdem: auch für diesen Hinweis noch einmal besten Dank!
Es kann auch nicht daran liegen, dass ein Compiler pp. nicht richtig eingebunden oder die Datei in einem Pfad mit unverträglichen Sonderzeichen gespeichert ist. Ein simples 'HelloWorld' mit genau denselben Einstellungen funktioniert ebenfalls tadellos?!?
# include <stdio.h> # include <stdlib.h> main() { printf("Hello World!"); printf("\n"); }
-
snoopydoo schrieb:
junix schrieb:
Klaus meinte mit der Frage was die Funktion wohl sollte eigentlich eher, was dir der Compiler genau sagt, was die Funktion sollte (sollen = should (engl) )
Deine Interpretation hilt (mir) leider nicht weiter, und zwar nicht weil ich nicht wüsste was 'should' heißt
. Du meinst ja wahrscheinlich nicht den eingangs zitierten Warnhinweis:'Function [b]should[/] return a value in function main at line 37'
, der bedeutet, dass die Funktion in Zeile 37 (= die Zeile mit der abschließenden geschweiften Klammer, s.o.) einen Wert zurückgeben sollte!?
Bravo. Nachdem Ebi eben dies geschrieben hat...
Vielleicht gibst du einfach mal 0 zurück und deklarierst die main mal anständig ( int main(void) ) und schaust ob sich dein Problem löst.
-
Vielleicht gibst du einfach mal 0 zurück und deklarierst die main mal anständig ( int main(void) ) und schaust ob sich dein Problem löst.
Auch das habe ich - wie berichtet - ohne Erfolg versucht.
Lass mal gut sein, Moderator. Ich bleib bei Dev-C++ und Eclipse...
-
Hallo
@snoopydoo
du hast die main sauber deklariert, und dann ist die Warnung immer noch dasorry, aber das glaube ich dir nicht
Bitte versuchs nochmal, bei mir (mit BCBX) klappt das)
MfG
Klaus