Forum: PC-Programmierung erstes C_Programm, erstes Problem


von Marius (Gast)


Lesenswert?

Hallo zusammen

Ich habe mir vor kurzem das Buch C, Programmieren von Anfang an gekauft 
und nun wollte ich das erste Beispiel durcharbeiten.
Ich habe bereits Erfahrung mit Programmieren, allerdings in Delphi und 
BASCOM.

Hier mein C-Code

#include <stdio.h>
main(){
       printf("\nDies ist ein erstes C_Programm.\n");
       printf("\nWie sie sehen, kann 'printf' ");
       printf("Nicht nur Texte drucken,\n");
       printf("Sondern auch rechnen.\n\n");
       printf("13*7=%i \n",13*7);
       }

Wenn ich die exe starte, kommt auf dem Bildschirm kurz ein kleines 
schwarzes Fenster (Komandozeile), das sofort wieder verschwindet.
Woran liegts? Im Buch wird ein solches Verhalten nicht beschrieben...

Grüsse

von Hc Z. (mizch)


Lesenswert?

In diesem Fenster steht Dein Text.

Damit es bleibt, musst Du Dein Programm schon aus einem solchen Fenster 
starten (Start->Ausführen->cmd.exe, dann zum Programmordner mit 'cd' 
navigieren).

von Klaus W. (mfgkw)


Lesenswert?

.. und dann das Programm starten.

von Dussel (Gast)


Lesenswert?

Probier auch mal, vor die schließende geschweifte Klammer

system("pause");

zu schreiben. Wenn es keine Fehlermeldung gibt, sollte dann das Fenster 
offen bleiben.

von g457 (Gast)


Lesenswert?

Das 'kleine schwarze Fenster' ist vermutlich die Konsole, in der Dein 
Programm ausgeführt wird. Die verschwindet deswegen gleich wieder, weil 
das Programm 'fertig' ist. Um das zu vermeiden gibts mehrere Optionen:

- busy-/blocking-waiting am Ende per read()/readchar()/scanf() oder 
sowas in der Richtung - brrrrrr, gleich die Finger weglassen davon, das 
gibt (später) nur Scherereien. Kann man aber behelfsweise z.B. in ein 
'#ifdef DEBUG' verpacken weils einfach ist und schnell geht.

- Der Entwicklungsumgebung (deren Namen Du uns vorenthalten hast :-) 
beibringen, dass sie das Fenster nicht gleich wieder schließen darf - 
kann möglich sein, muss aber nicht

- Dem (Betriebs)System (dessen Namen Du uns vorenthalten hast :-) 
beibringen, dass es das Fenster nicht gleich wieder schließen darf - 
kann möglich sein, muss aber nicht

- Der sauberste Weg: Das Programm aus einer Konsole starten, das sieht 
dann etwa so aus:
1
$ gcc -Wall main.c -o main
2
main.c:2: warning: return type defaults to ‘int’
3
main.c: In function ‘main’:
4
main.c:8: warning: control reaches end of non-void function
5
$ ./main 
6
7
Dies ist ein erstes C_Programm.
8
9
Wie sie sehen, kann 'printf' Nicht nur Texte drucken,
10
Sondern auch rechnen.
11
12
13*7=91 
13
$

HTH und HF

P.S.: printf kann nicht selbst rechnen.. jedenfalls nicht so wie im 
Beispielcode suggeriert :-)

von Hc Z. (mizch)


Lesenswert?

Im obigen Beispiel rechnet übrigens nicht printf(), wie es der Text 
nahelegt.  Es ist der C-Compiler, der 13*7 rechnet, und printf bekommt 
nur noch das Ergebnis zu sehen, nicht aber die Multiplikation.  Mit der 
hat es rein gar nichts am Hut.

Ich hasse es, wenn eine Einführung bei solchen elementare Dingen schon 
schludert.  Es mag eine Kleinigkeit sein, aber gerade die sollten 
stimmen.

von Marius (Gast)


Lesenswert?

okay, danke euch allen, das geht immer so schnell^^:D

zum Thema printf kann nicht selbst rechnen, dass sollte wohl noch 
erwähnt werden im Buch;)

aus der Konsole heraus geht's danke;)

PS: OS ist Win 7 und der Compiler ist Bloodshed Dev C++


Grüsse & danke, jetzt kanns weiter gehen;)

von X. H. (shadow0815)


Lesenswert?

system("pause");

Gilt nur für Windows. Macht extra nen Warte-Prozess auf.
Mag ich aber trotzdem auch, weil es nicht schwer ist sich "system" und 
"pause" zu merken. Die "Eleganten", Lösungen hab ich nie im Kopf und 
haben meist auch Verhalten, dass ich nicht wünsche...

von Klaus W. (mfgkw)


Lesenswert?

getchar() konnte ich mir bisher auch merken, obwohl ich ein
schlechtes Gedächtnis habe.

von c# please (Gast)


Lesenswert?

1
Console.Readline();

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hinweise auf C# sind in einem Thread, in dem es um C geht, nicht 
hilfreich.

von Sven P. (Gast)


Lesenswert?

Ich finds irgendwie immer wieder amüsant, dieses Phänomen. Also das, mit 
dem verschwindenden Fenster.

Früher(tm) war es das natürlichste von der Welt, mit einer Konsole zu 
arbeiten, und es gab wenig Probleme, die Konzepte hinter Streams, 
blockierenden Eingaben, Pipelines und so weiter zu vermitteln.

Heute ist das alles so altmodisch und primitiv. Sogar so primitiv, dass 
es kaum wer ernsthaft begreift...

von X. H. (shadow0815)


Lesenswert?

>getchar() konnte ich mir bisher auch merken, obwohl ich ein
>schlechtes Gedächtnis habe.

Das ist kein press anykey, das ist ein Press Enter...

von Klaus W. (mfgkw)


Lesenswert?

ich hatte mal gelesen, Enter wäre die Anikei-Taste?

von Peter (Gast)


Lesenswert?

Sven P. schrieb:
> Früher(tm) war es das natürlichste von der Welt, mit einer Konsole zu
> arbeiten, und es gab wenig Probleme, die Konzepte hinter Streams,
> blockierenden Eingaben, Pipelines und so weiter zu vermitteln.
>
> Heute ist das alles so altmodisch und primitiv. Sogar so primitiv, dass
> es kaum wer ernsthaft begreift...

Früher wurden auch Bäume noch mit Äxten gefällt und das Essen wurde am 
Lagerfeuer zubereitet. Das ist so typisch von alt Eingesessenen die 
nicht wahrhaben wollen dass die Technik sich ändert und ihr damals so 
mühsam angeeignetes Wissen nicht mehr zeitgerecht ist. Was sagen die 
Profs immer? Als Ing lernt man nie aus und man muss sich ständig 
weiterbilden! Anscheinend habe ich das als Student eher begriffen als 
manch Alt-Ing.

Konsolenanwendungen sind Mist. Zumindestens dann wenn es modernen Ersatz 
gibt. In manchen Bereichen wird unter anderem aus Kostengründen noch mit 
Konsolenanwendungen gearbeitet. Das verschlingt soviel Zeit und dann 
kommen noch so OpenSource-Kram dazu. Wo keiner auch nur irgenwas 
dokumentiert, keine Ansprechpartner vorhanden sind und man ewig braucht 
um auch nur irgendwas auf die Reihe zu kriegen. Ich habe Konsolen hassen 
gerlernt.

von Klaus W. (mfgkw)


Lesenswert?

Stimmt, kommerzielle GUI-Programme sind durchweg besser dokumentiert.
Sehr schlüssige Argumentation!

Und für die ersten Gehversuche des TE sicher vieeeel besser
verständlich.
So eine Ausgabe mit printf ist ja viel zu undurchsichtig
im Vergleich mit einem echten Windowsprogramm!

von STK500-Besitzer (Gast)


Lesenswert?

>So eine Ausgabe mit printf ist ja viel zu undurchsichtig
>im Vergleich mit einem echten Windowsprogramm!

Zustimmung!
Ich pule mir gerade C# mit Hilfe eines Buchs von Dirk Louis bei.
Das erste allererste Programm wird mit Hilfe des Editors 
zusammengeklickt, um zu sehen, was am Ende herauskommt (bzw. wie ein 
Programm als Beispiel aussehen kann).
Danach wird erst mal auf der Konsole weitergemacht und auch deren Tücken 
(kurzes Aufflackern des Fensters etc.) schön beschrieben, sowie deren 
Behebenung.
Sowas fehlt den meisten Anfängern, und ich kann mir nicht vorstellen, 
dass die "Cracks" hier auch gleich Fenster-Programme geschrieben haben.
Dass Konsolenanwendungen im Opensource-Bereich nicht unbedingt gut 
dokumentiert sind, ist doch selbstverständlich (zumindest kann ich es 
gut verstehen): Man schreibt etwas für sich selbst hilfreiches und 
stellt es jedem zur Verfügung, der es vielleicht auch brauchen kann. 
Dazu wird vielleicht noch kurz geschrieben, was das Tool kann, und die 
Doku muss reichen; ich selbst weiss ja, wie das Tool arbeitet.
Leute, die Sachen umsonst mit dem kompletten Service haben wollen, sind 
irgendwie falsch davor. (Meine persönliche Meinung)

von Flipcode (Gast)


Lesenswert?

und ich werde nie begreifen warum die leute immernoch devcpp empfehlen 
und oder verwenden.

von Karl H. (kbuchegg)


Lesenswert?

Peter schrieb:
> Sven P. schrieb:
>> Früher(tm) war es das natürlichste von der Welt, mit einer Konsole zu
>> arbeiten, und es gab wenig Probleme, die Konzepte hinter Streams,
>> blockierenden Eingaben, Pipelines und so weiter zu vermitteln.
>>
>> Heute ist das alles so altmodisch und primitiv. Sogar so primitiv, dass
>> es kaum wer ernsthaft begreift...
>
> Früher wurden auch Bäume noch mit Äxten gefällt und das Essen wurde am
> Lagerfeuer zubereitet. Das ist so typisch von alt Eingesessenen die
> nicht wahrhaben wollen dass die Technik sich ändert und ihr damals so
> mühsam angeeignetes Wissen nicht mehr zeitgerecht ist.

Dann beschwer dich aber nicht, wenn es dich in den Wald verschlägt und 
du ohne deine moderne Technik, nur mit einer Axt und Streichhölzern 
bewaffnet, zurecht kommen musst.

In einer Zeit, in der mechanische Fertigung mit CNC Maschinen gemacht 
wird, ist der Umgang mit Feile, Säge und Schraubenzieher keineswegs als 
unnütze Fertigkeit anzusehen.

Oder würdest du es zb begrüßen, wenn deine Kinder in der Grundschule 
nicht mehr das 'kleine Einmal Eins' lernen müssen, nur weil ja doch 
Computer für uns das Rechnen übernommen haben?

von B. M. (Gast)


Lesenswert?

Peter schrieb:
> Konsolenanwendungen sind Mist. Zumindestens dann wenn es modernen Ersatz
> gibt. In manchen Bereichen wird unter anderem aus Kostengründen noch mit
> Konsolenanwendungen gearbeitet. Das verschlingt soviel Zeit und dann
> kommen noch so OpenSource-Kram dazu. Wo keiner auch nur irgenwas
> dokumentiert, keine Ansprechpartner vorhanden sind und man ewig braucht
> um auch nur irgendwas auf die Reihe zu kriegen. Ich habe Konsolen hassen
> gerlernt.

So ein Blödsinn habe ich schon lange nicht mehr gehört. Es gibt 
wahrscheinlich nichts in der Computertechnik, was so flexibel wie die 
Console ist.

Wir administrieren rund 250 Unixrechner von der Console und haben die 
etwa 10 Windows 2003 Server GUI-Administration hassen gelernt.

von X. H. (shadow0815)


Lesenswert?

Ich mag es, wenn ein Programm mir die Freiheit gibt, es über 
Konsolenbefehle ansprechen zu können oder als GUI-Programm.

So hat man beide Welten.

Ein gutes Konzept ist doch zuerst ein Konsolenprogramm zu erstellen, 
dass die Funktion bietet und diesem dann zusätzlich eine GUI 
aufzusetzen.

Dass Konzept muss nicht überall sinnvoll sein. Für ein 3D-Spiel wohl 
eher nicht...
Aber auch dieses kann Konsolenbefehle entgegen nehmen. Und die Spiele 
haben ja sogar eine eingebaute Konsole, von daher ist die tatsächlich so 
unmodern, dass sie sogar Ballerspiele besitzen ;)

von R. F. (rfr)


Lesenswert?

Ich habe von Anfang an emacs und die bash bzw ksh genutzt. Das ist 
klasse, wenn man bestimmte Anwendungen automatisieren will. Zu Zeiten 
der WM oder wichtiger Fussballspiele habe ich alles an Downloads per AT 
gestartet, und auch die Programmierbarkeit der shell ist immer noch 
gefragt. Und ausserdem sagt mir Oberfläche, warum was abstürtzt, eine 
GUI Anwendung eher nicht.

Gruss
Robert

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

X. H. schrieb:
> Ein gutes Konzept ist doch zuerst ein Konsolenprogramm zu erstellen,
> dass die Funktion bietet und diesem dann zusätzlich eine GUI
> aufzusetzen.

Das funktioniert nur sehr schlecht, weil die Denk- und 
Programmiermodelle sich sehr stark unterscheiden. Konsolenanwendungen 
sind üblicherweise prozedural aufgebaut, d.h., der Programmfluss ist 
festgelegt. GUI-Anwendungen sind aber ereignisorientierte Anwendungen, 
die auf Nachrichten vom Betriebssystem bzw. Nutzereingriffe warten.

Die "Denke" vom einen auf das andere Modell umzustellen ist durchaus 
nicht einfach. Herauskommen tun dann oft Programme, die für lange Zeit 
einzufrieren scheinen, weil sie irgendwelche langwierigen Dinge tun, 
ohne auf Nachrichten zu reagieren. Wer "richtige" GUI-Anwendungen 
gewohnt ist, hält solche Programme dann leicht für kaputt.

von Klaus W. (mfgkw)


Lesenswert?

Rufus t. Firefly schrieb:
> Konsolenanwendungen
> sind üblicherweise prozedural aufgebaut, d.h., der Programmfluss ist
> festgelegt.

ist häufig so, muß aber beileibe nicht.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist aber bei Programmieranfängern eher eine Zufallserscheinung denn 
gewollt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.