Anfänger Frage zu c++
-
Ich hab mir einen der Tutorials von der Seite hier runtergeladen,
wenn ich die Programme mit meinem Compiler compiliere, funktioniert das zwar (ich kann das programm starten) allerdings endet das prog dann bevor es das ergebnis ausgegeben hat (oder zumindest bevor man das Ergebnis lesen kann)float berechnekegelvolumen (float r, float h)
{
const float PI=3.14f;
float g=PI*r*r;
float volumen=(g*h)/3;
};
void main(void)
{
float radius;
float hoehe;
cout <<"geben sie den Radius des Kreises ein: ";
cin >> radius;
cout <<"geben sie die hoehe des kegels ein: ";
cin >> hoehe;
cout <<"das Volumen des Kegels ist: " << berechnekegelvolumen(radius, hoehe);
}Was stimmt daran net???
-
chedd schrieb:
allerdings endet das prog dann bevor es das ergebnis ausgegeben hat (oder zumindest bevor man das Ergebnis lesen kann)
Füge das am Ende von main() hinzu:
cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cin.get();
-
Hmm, geht nicht.
Da bekomm ich syntax errors.
(wie gesagt ich bin Anfänger)
-
Ahh,
Geht dochIch hatte des am ende der void main(void) Zeile eingefügt und net am ende der main Funktion.
thx für die schnelle Hilfe
Edit: Bleibt nur noch die Frage was des heisst ;)? Weil es nutzt mir nix wenn du mir sagst was ich mach ichs aber net versteh. Dann kann ichs glei andere machen lassen
.
-
Lies mal hier, diesen Beitrag über void main().
-
schau Dir dieses Tutorial an:
http://home.arcor.de/cpp_kurs/cpp/toc.htmist eines der Besten für den Einstieg.
-
Der Standard verbietet 'void main()' nicht explizit, aber ein standardkonformer Compiler darf bei 'void main()' undefiniertes verhalten an den Tag legen.
Da steht aber auch das, und da mein Compiler nicht dagegen hat darf ichs ja benutzen oder?
-
ched schrieb:
...aber ein standardkonformer Compiler darf bei 'void main()' undefiniertes verhalten an den Tag legen.
Du willst doch aber sicher, das dein Code auch auf anderen Compilern einwandfrei läuft oder?? Darum schreib einfach die "feinere" Variante
-
es sollte immer int main (...) heißen
und das Programm sollte mit return 0 beendet werden wenn es fehlerfrei war und !=0 wenn es fehler hatte.
Damit kann man in Scriptsprachen (WSH, Batch, perl, phyton, ruby) oder beim Aufruf dieses Programmes aus einem anderen heraus auf Fehler reagieren.
-
float berechnekegelvolumen (float r, float h) { const float PI=3.14f; float g=PI*r*r; float volumen=(g*h)/3; };
Also, wenn da ein Wert zurückgegeben werden soll, würde ich vielleicht mal 'return volumen;' in die letzte Zeile der Funktion schreiben.
-
Macht des keinen Unterschied ob ich void main(void) oder int mein () schreib??
Und was kommt in die klammer??
-
in die klammern kommen die parameter ...
zum übernehmen oder sonstwas :D.
kann dir bestimmt ein anderer besser erklären, draum lass ich es lieber
-
in die Klammern kommen 2 sachen (siehe unten) die parameter vom programmaufruf aufnehmen können. Sie müssen aber nicht zwingend dort stehen und sind am besten wegzulassen, wenn due sie eh nicht brauchst.
int main (int argc, char** argv)
argc enthält die anzahl der parameter
*argv zeigt auf die parameterdie erste Zeichenkette enthält den Programmnamen (inkl. Pfad), alle weiteren die übergebenen Parameter, wobei nach jedem "<leerzeichen>" in einem neuen index gespeichert wird.
-
#include <iostream> #include <conio.h> int main( int argc, char *argv[] ) { for( int i=0; i<=argc; ++i) { std::cout << i << ": " << argv[i] << std::endl; } getch(); return 0; }
Eingabe:
main arg1 arg2Ausgabe:
0: main
1: arg1
2: arg2
3:siehe auch http://www-home.fh-konstanz.de/~drachen/prog/Teil-4.pdf
-
Erhard Henkes schrieb:
Eingabe:
main arg1 arg2Ausgabe:
0: main
1: arg1
2: arg2
3:Punkt 0 stimmt definitiv nicht! argv[0] enthält den kompletten pfad zum programm! (getestet mit VC++ 6.0)
-
THE_FreaK schrieb:
Punkt 0 stimmt definitiv nicht! argv[0] enthält den kompletten pfad zum programm! (getestet mit VC++ 6.0)
*g* nur weils der VC++6 so macht, ist es noch lange nicht standard.
darf ich zitieren:
[...] argv[0] shall be the pointer to the initial character of a NTMBS that represents the name used to invoke the program or ""
NTMBS: null-terminated multi-byte string
also auf deutsch: char*es ist also vollkommen korrekt, wenn in argv[0] nur "main" steht.
-
Da muss man vorsichtig sein innerhalb der Visual C Umgebung , also beim Debuggen ist alles dabei, auf der Kommandozeile nicht unbedingt.
z.b. ruft der Debugger das programm immer inclusive der extension "exe" auf. Dies passiert auf der Kommandozeile selten.
Deshalb sollte man an dieser Stelle vorsichtig sein wen mann argv[0] benutzen will.
(leidvolle Erfahrung)
-
argv[0] zu benutzen ist nicht sinnvoll moeglich, da es ja auch " " sein kann...
wofuer argv[0] gut ist, habe ich noch nicht entdeckt - da es ja keine festgeschriebene form hat. das einzige was man damit machen kann ist 1) loggen wie es aufgerufen wurde oder 2) sich selbst nochmal starten.
-
Wann ist arg[0] leer?
Soweit ich weis ist definiert das der Name des aufrufenden Programms drinstehen soll.
Was leider nicht definiert ist, wie er dort steht mit Pfad, ohne Pfad, mit extension, ohne extension.Bei alle C-Programmen die ich bisher bearbeitet habe war er nie NULL.
Wir nutzen den namen tatsächlich zum loggen. In der Protokolldatei wird argv[0]....argv[n] protokolliert.
Bei Windowsprogrammen, die haben bei uns alle den Microsoft Versionrecord wird aus argv[0] der
komplette Programmname erzeugt und damit der Versionsrecord gelesen und im logfile protokolliert.Deshalb bitte mich nicht erschrecken das argv[0] leer sein kann oder beweisen.
Bitte um Antwort
-
Shade Of Mine schrieb:
*g* nur weils der VC++6 so macht, ist es noch lange nicht standard.
ok, seh ich ein ^^
Grade weils MS ist sollte man ja eigentlich einiges erwarten *roleeyes*
Aber man lernt eben immer dazu@PAD
Naja, scheint ja nun leider compiler abhängig zu sein, also solang ihr immer den selben kompiler nutzt wirds nit schief gehen.