Habe mir den Dev-C++ besorgt und folgenden Code compiliert:
Muss da noch irgendwas hin? Bin diesbezueglich totaler N00b.
Ganz kurz flackert ein Fenster auf und verschwindet dann sofort. (Beim Versuch die Compilierte Datei auszuführen...)
Das ist ein Kommandozeilen-Programm (grafische Programmierung ist um einiges schwerer als Kommandozeile). Wenn du es aus der grafischen Oberfläche von Windows ausführst, öffnet sich eine Kommandozeile, in der das Programm ausgeführt wird. Allerdings schließt sie sich wieder, sobald die Ausführung beendet ist.
Lösungen:
- Programm auf Kommandozeile ausführen
- als letzte Zeile in die Funktion main system("pause"); anhängen. Das ist ein System-Call, mit dem Windows vor dem Beenden des Programms auf einen Knopfdruck wartet. Damit ist dein Programm allerdings nicht mehr protabel.
ehrlich gesagt weis ich nicht wirklich was du damit meinst...
...
Das Programm wird eben in der Konsole (MSDos Eingabeaufforderung; idR: xwindows\system32\cmd.exe) ausgeführt.
Zitat von Niji-chan
Funktioniert einwandfrei.
Kann es durch die Benutzung des Befehls zu irgendwelchen Problemen kommen?
...
Eigentlich nicht. Das Programm ist, wie schon gesagt wurde, nicht portabel. Aber das sollte für einen Programmieranfänger erstmal nicht sonderlich schlimm sein.
Zitat von Niji-chan
Wie macht man, dass die Nachricht "Drücken Sie eine beliebige Taste . . ." eine Zeile nach unten verschoben wird?
...
Indem du vorher einen Zeilenumbruch ausgibst. Also printf("\n");. Oder direkt in deiner Ausgabe:
freundliche Grüße, Rolus
Weitere Frage:
Da ich mit einem alten Buch arbeite (Der Einstieg in C, ISBN: 3890900860), dass sogar noch von raumfüllenden Rechnern spricht und die heutzutage "normalen" PCs als Kleincomputer bezeichnet, frage ich mich, ob es daran liegen mag, dass folgendes Programm einen Fehler auswirft:
Zitat
C...\C Programmieren lernen\Abbildung3.c In function `main':
6 C...\C Programmieren lernen\Abbildung3.c `stdin' undeclared (first use in this function)
(Each undeclared identifier is reported only once
for each function it appears in.)
...
Soweit ich das verstehe liegt es an dem "stdin", dass so einfach angegeben wurde. (Ich habe nach Buchanweisung gearbeitet... ok, is abgeschrieben )
Afaik muss oben in der Datei #include <stdio.h> stehen (hab mich nie wirklich mit C beschäftigt). Steht das da?
(Die Datei enthält Implementierungen der Standard-Ein- und Ausgaben, also u.A. stdin).
Wohin gehört denn das dann und 2. muss ich die jeweilige Datei dann im gleichen Ordner haben?
Beim 1.Versuch kamen wieder nen Haufen von Fehlermeldungen...
Notfalls kann ich ja auch mit scanf arbeiten, klappt nämlich ganz gut.
Die Include-Anweisung solltest du ganz an den Anfang schreiben. Und die Datei muss nicht im gleichen Ordner liegen. Jeder normale C-Compiler hat die stdio.h bei seinen Include-Dateien und findet sie auch.
Was zum Henker ist eine solche Fakultät?
Ich frage mich jetzt, ob damit nun einfach bloß "x=5*4*3*2*1" gemeint ist, oder ob da mehr hinter steckt...?
...
Nö, mehr steckt nicht dahinter. Die mathematische Fakultät einer Zahl erhält man in der Tat, indem man die Zahlen von 1 aufwärts bis zur Zahl miteinander multipliziert. Also Fakultät von 3 = 1 * 2 * 3. Manchmal sind Mathematiker halt etwas .. eigenartig, zumindest was die Benennung einiger Dinge betrifft.
Ich denke aber mal, dass du nicht einfach x = 5*4*3*2*1; schreiben sollst, sondern eine Funktion, die das für dich macht. So dass man x = fakultaet(4); oder x = fakultaet(5); oder x = fakultaet(1337); schreiben kann.
Wobei es in <cmath> sicher schon eine passende Funktion gibt..
Bei Funktionen bin ich noch nicht angekommen... Noch immer im 1.Kapitel ...
bzw. bin ich mit dem 1.Kapitel jetzt durch und mache eine kleine Pause, bevor ich an "Elementare arithmetische Operationen" rangehe...
hab Hunger.
Nur noch ne kleine Frage:
Bei
könnte ich stattdessen auch
schreiben?
Ja, sollte eigentlich gehen. Der Variable erg wird der neue Wert erst zugewiesen, sobald er aus dem alten errechnet wurde. Ist ja auch irgendwie logisch.
PS: Dingsi's/Heiko's Sig-Bildchen ist echt fies. Erst recht der Name. Absolut nicht wahrheitsgetreu.
C...\C Programmieren lernen\abbildung15.c In function `main':
6 C...\C Programmieren lernen\abbildung15.c [Warning] assignment makes pointer from integer without a cast
[Linker error] undefined reference to `alloc'
6 CDokumente und Einstellungen\...\C Programmieren lernen\abbildung15.c ld returned 1 exit status
der compiler scheint irgend ein problem mit der alloc-funktion zu haben. falls du vor hast, hauptsächlich c++ zu programmieren, würde ich mich gar nicht erst mit den alten c-pointerfunktionen auseinandersetzen. z.b. kann man in deinem beispiel ganz einfach mit der c++-klasse string arbeiten. ps: komisches buch hast du da
und ein neues Problem:
Wenn ich nach Eingabe der Zahl mit Enter bestätige, wird das Fenster sofort geschlossen und ich kann die darauf folgende Ausgabe nicht mehr zu lesen bekommen. Gibt es da noch eine andere Möglichkeit, als "system=("pause");"?
Das öffnet ein Fenster mit einer Kommandozeile.
Mit cd navigierst du in den Ordner, in dem dein Programm liegt, wobe du mit cd .. in den jeweils höher liegenden Ordner wechseln kannst (also von CWindows\ nach C).
Wenn du im richtigen Ordner bist tippst du einfach den Dateinamen deines Programms ein, um es auszuführen.
Das sich dein Fenster nach dem Drücken von Enter direkt schließt, könnte daran liegen, dass die Betätigung der Entertaste nach dem Bestätigen der Zahleneingabe noch im Tastaturpuffer vorhanden ist und somit dann an das getchar() weitergegeben wird, ohne das eine weitere Tastaturbetätigung abgewartet wird.
Versuch mal folgendes: füge nach dem scanf die Zeilen
ein, um den Tastaturpuffer zu leeren. Dann sollte das Fenster geöffnet bleiben, bis du erneut eine Taste drückst.
Das sich dein Fenster nach dem Drücken von Enter direkt schließt, könnte daran liegen, dass die Betätigung der Entertaste nach dem Bestätigen der Zahleneingabe noch im Tastaturpuffer vorhanden ist und somit dann an das getchar() weitergegeben wird, ohne das eine weitere Tastaturbetätigung abgewartet wird.
Versuch mal folgendes: füge nach dem scanf die Zeilen
ein, um den Tastaturpuffer zu leeren. Dann sollte das Fenster geöffnet bleiben, bis du erneut eine Taste drückst.
...
warum so kompliziert?
die funktion löst das problem auch: fflush(stdin);