[C/C++] Problem beim Ausführen selbst programmierter Sachen

Skilfing

Herzlich willkommen!
Problem beim Ausführen selbst programmierter Sachen

tach zusammen, bin mal wieder einer der absolut blutigen anfänger, die sich gestern fest entschlossen dran gemacht haben c++ in langsamen mühsammen schritten zu erlernen.

also compiler wurde mit der dev-c++ empfohlen, welchen ich jetzt nutze.

jetzt mein problem: ich tippe beispiele aus tuts ab, bzw kopiere sie und will sie dann ausführen, also um zb endlich mal den text von hello world zu sehen.

so zb:

#include <iostream.h>
void main()
{
// Dies ist das Hello-World-Programm
cout<<"Hello, world!"<<endl;
};


ich mach denn compilieren und ausführen, er compilierts auch und schreibt unten eine fehlermeldung hin (anhang).

aber es wird einfach kein programm geöffnet - gar nichts. also es wird irgendwie nicht "ausgeführt", kann mir jmd sagen warum oder was ich falsch mache?

vielen dank für eure mühen bereits im voraus

gruss
skilfing
 

Anhänge

  • fehler.JPG
    fehler.JPG
    30,4 KB · Aufrufe: 125

ElSer

nicht mehr wegzudenken
Hallo Erstmal ! :)

Meldung lautet:
'main' must return 'int'

Daher wird dein Ausgabefile (hallo.o) nicht erstellt (korrekt?)

versuche:

int main(void)
{
[...]
return 1;
}
 

Polyhistor

nicht mehr wegzudenken
Moin :)
also mit c++ habe ich noch nicht soo viel Erfahrung um nicht zu sagen gar keine ... :)
aber in c ist es so, dass man "return 0;" macht, wenn das Programm ohne Fehler ausgeführt wurde und "return 1;" wenn im Programm ein Fehler aufgetreten ist.
 

ElSer

nicht mehr wegzudenken
Obwohl ich nicht glaube, daß es in diesem Zusammenhang relevant ist:

Für viele Programm mag dies gelten, bei diskcomp z.B. bedeutet 0, daß die Disketten identisch sind, 1 deutet auf Unterschiede und 3 oder 4 meldet einen Fehler. Von den Return - Codes bei ANSI-C-Funktionen mal ganz zu schweigen...

Aber @Skilfing: return 0 funktioniert auch. :)
 

Skilfing

Herzlich willkommen!
dank euch für die schnelle hilfe.

ich mache gerade 3 verschiedene tuts gleichzeitig und alle geben falsche lösungen an, so macht das net wirklich spass.
auch wird in keinem erklärt was
void main()
oder
int main(void)
bedeuten soll, aber wenn man ersteres in das 2. ändert funktionierts auf jeden fall, auch ohne den return befehl.
"funktionieren" bedeutet bei mir, dass für einen bruchteil von ner sekunde ein dos fenster aufpoppt, zum lesen reicht das aber auf keinen fall. ich schätze mal, dass hello world drin steht, aber mein rechner eben zu schnell ist (conroe e 6600... ;) )

was würd ich für ein anständiges tut geben!
 

Skilfing

Herzlich willkommen!
und schon wieder ein problem:

das programm

#include <iostream.h>
#include <stdio.h>

int EingabeZahl;

char EingabeBuchstabe;

int main(void)
{
cout << "Hello World" << endl;
cout << "Geben sie bitte eine Zahl ein: ";
cin >> EingabeZahll;
cout << "Geben Sie bitte einen Buchstaben ein: ";
cin >> EingabeBuchstabe;
cout << "Sie haben die Zahl " << EingabeZahl << "und das Zeichen";
cout << EingabeBuchstabe << " eingegeben." << endl;
getchar();
}


kommt durch den kompilierer und kann gestartet werden, aber nach der eingabe des buchstabens wird es beendet und spuckt mir nicht wie eigentlich geplant nochmal meine eingaben aus, was mach ich falsch?
 

chmul

Moderator
Teammitglied
Ich habe nicht den geringsten Schimmer wovon Ihr hier redet, aber als Laie sehe ich, dass Du einmal EingabeZahll und später EingabeZahl verwendet hast. Tippfehler beim Erstellen des Beitrages oder vielleicht auch beim Schreiben des Codes?

Wobei ich natürlich auch nicht weiß, ob das Problem überhaupt von einem Tippfehler verursacht werden kann... :)
 

ElSer

nicht mehr wegzudenken
ich mache gerade 3 verschiedene tuts gleichzeitig und alle geben falsche lösungen an
Wenn ein 'tut' bei dir ein Tutorial oder sogar eine Anleitung ist, dann konzentriere dich mal auf eines. Kannst Du bereits C oder eine sonstige Hochsprache? (Aber wer lernt schon noch Assembler...)

so macht das net wirklich spass.
Wer sagt, daß C++ Spaß machen soll:D

auch wird in keinem erklärt was void main() oder int main(void) bedeuten soll
'main' ist (im Prinzip) eine Funktion. Die Typangabe int/void gibt an, was diese Funktion zurückliefert.

auch ohne den return befehl.
Das hängt vom Compiler ab (M$ z.B. verlangt eine Rückgabe)

cin >> EingabeBuchstabe;
cout << "Sie haben die Zahl " << EingabeZahl << "und das Zeichen";
cout << EingabeBuchstabe << " eingegeben." << endl;
getchar();
Du verwendest zum Einlesen eines Zeichens einmal 'cin>>' und einmal 'getchar()'. Bleibe bei 'cin>>', dann sollte es tun. (Kann es sein, daß du ein C und ein C++ 'tut' verwendest?)

Ich würde dir gerne ein gutes Buch empfehlen, außer dem "Software Engineering Approach" (nur englisch und nur C) fällt mir aber keines ein. Ich weiß nur, daß ich mich zum lernen auf eines beschränken würde, reduziert Konfusion.

@chmul:
Das doppel 'l' ist ein Beitragsfehler, sonst würde der C++ - Compiler verweigern.
 

Skilfing

Herzlich willkommen!
nochmals vielen dank für die erleuterungen und die hilfe.
ich muss zugeben, dass mit c++ lernen schon ein wenig spass macht ;)

ich bediente mich nur mehrerer tuts um evtl in einem auf eine funktionierende lösung zu stoßen.

ja, des zweite l war nur tipfehler im beitrag.

ich verwende nur c++ tut und der getchar befehl ist an der stelle nur dazu da, dass sich das fenster nicht nach ausgeben meiner nachrichten binnen einem bruchteil einer sekunde schließt sondern damit ich zeit habe den ausgegebenen text zu lesen - es soll hier also nicht wirklich ein text eingegeben werden.

ich habe jetzt versucht den getchar() befehl wegzulassen, doch das bewirkt wie erwartet nur, dass sich das programm wieder nach meiner 2. eingabe selbst schließt.

gruss,
skilfing
 

Hidden Evil

Moderator
Teammitglied
getchar() (ich kenne es nur als getch() (hierfür wird der Header conio.h benötigt)) kann auch einfach nur verwendet werden, um eine Wartezeit a la "Belibige Taste zum Fortführen" einzubauen.

Man kanns auch verwenden, um bei einem bestimmten Tastendruck eine Aktion ausführen zu lassen, ohne erstmal Eingabe -> Eingabetaste zu benutzen. Aber das tut ja hier erstmal nix zur Sache.
 
Zuletzt bearbeitet:

Skilfing

Herzlich willkommen!
io, genauso wars auch gedacht hidden evil :)

mal wieder zurück zum ursprünglichem problem.

hier ein ähnliches programm mit variablen, das sich starten lässt, sich jedoch nach der eingabe des 2. summanten wieder selbst schließt ohne mir mein ergebnis auszuspucken.

#include <iostream.h>
#include <stdio.h>

int Summant1;
int Summant2;

int Ergebnis;

int main(void)
{
cout << "Bitte geben Sie den ersten Summanten ein " << endl;
cin >> Summant1;
cout << "Bitte geben Sie den zweiten Summanten ein " << endl;
cin >> Summant2;
Ergebnis = Summant1 + Summant2;
cout << "Das Ergebnis der Addition ist " << Ergebnis << endl;
getchar();
}


kann mir bitte jemand erklären woran das liegt *?*

danke für eure geduld und hilfe
skilfing


edit: es KLAPPT! :) ich hab conio.h includiert und statt den getchar() befehlt den getch() benutzt und alles läuft wie am schnürchen. warum versteh ich zwar nicht, aber das kommt mit der zeit ^^
 
Zuletzt bearbeitet:

Hidden Evil

Moderator
Teammitglied
Probier statt getchar() mal getch(). Und dafür wie gesagt den Header conio.h nicht vergessen. Da hat es bei mir bisher immer geklappt.
 

Skilfing

Herzlich willkommen!
hab deinen vorschlag wie im edit geschrieben ja schon ausprobiert und es hat geklappt, also nochmal danke!

der link scheint mir für den anfang sehr hilfreich zu sein, der wird bei mir oft verweundung finden ;)

gruss,
skilfing
 

Polyhistor

nicht mehr wegzudenken
ElSer schrieb:
Für viele Programm mag dies gelten, bei diskcomp z.B. bedeutet 0, daß die Disketten identisch sind, 1 deutet auf Unterschiede und 3 oder 4 meldet einen Fehler. Von den Return - Codes bei ANSI-C-Funktionen mal ganz zu schweigen...

Möchte dazu nochmal meinen Senft zugeben ... :)
Also im Grunde gibt man ja "normalerweise" nur an das ausführende System zurück, ob das Programm richtig ausgeführt wurde, oder ob da ein Fehler aufgetreten ist. Darum gibt sollte das "return 0;" da stehen, weil dies in der c und c++ Welt äquivalent zu ture ist. Alles andere ist im Grunde false.
Alles andere so wie in dem Beispiel mit dem diskcomp wir oder sollte in der Dokumentation/Hilfe erklärt werden.
Mal davon abgesehen würden beim Vergleichen von Disketen auch gar nicht zwei Werte: True, False reichen ... Es können ja mindestens 3 Fälle eintreten ... . Aber seis durm


ot: Mich würde mal interessieren, ob c++ deine erste Programmiersprache ist die du lernst :) nur aus reiner neugier ...
 

Skilfing

Herzlich willkommen!
moin moin :)
ja, ist meine erst sprache. im nachhinhein: ist das empfehlenswert? dazu bekommt man nämlich selten deutliche aussagen, mit welcher man eigentlich anfangen sollte, wenn man noch gar nichts kann.

hab nebenbei gestern meinen ersten funktionsfähigen taschenrechner mit hilfe des switch befehls programmiert. *stolz* ;)
mir machts einfach spass, könnte mir momentan vorstellen sowas auch beruflich zu machen (bin 19 und mach grad meinen zivi, danach soll was studiert werden).

gruss
skilfing

edit:
noch eine frage: wie kann ich zu einer .cpp file eine art exe erstellen, damit auch andere das programm ohne einen compiler ausführen können?
 
Zuletzt bearbeitet:

ElSer

nicht mehr wegzudenken
@Skilfing
Super, wird doch...(y)
Und Dein Compiler (oder besser Dein Linker) erzeugt so eine Art EXE. Wenn Du unter Windows arbeitest, sollte eine einfache umbenennung von *.o in *.exe ausreichen, unter Linux mußt Du die Datei executable machen (da gibts kein exe).


@polyhistor
wobei true == 1 oder -1 und false==0 (Ich glaube im ANSI steht, daß true != 0???). Aber 'fehlerlos' == 0. (Bis auf bei einigen ANSI-Funktionen...) Das Beispiel mit '0' war vielleicht wirklich schlecht, '1' wäre natürlich korrekt (wobei [...] nicht definiert, also evtl. auch negativ== false sein könnte.) Aber das diskutiere ich jetzt, Samstag Abend, nach 3 Viertel Roten, nicht zu Ende ... :upsala
 
Oben