Erstes C Programmierversuch und es klappt nicht

Gamer090

PCGH-Community-Veteran(in)
Hi zusammen

Ich habe mir mal das Buch von Helmut Erlenkötter "Programmieren von Anfang an" gekauft da es gute Kundenbewertungen hatte.

Jedoch habe ich grade das erste Programm geschrieben wenn ich es so nennen darf und Microsoft Visual Studio C++ Express 2010 kann nix damit anfangen.

Also wenn ich F5 drücke passiert nix habe ich etwas vergessen?

/* bsp10001.c */
#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);
}

Und das ist aus dem Buch und es funktioniert nicht ? :what: Danke für eure Hilfe, will mal so als kleines Hobby ein bisschen Programmiern evtl. kommt irgendwas grösseres irgendwanm
 
Code:
int main()
{
   // ...
   return 0;
}
oder
Code:
int main(int argc, char *argv[])
{
    // ...
    return 0;
}
Bitte nicht main() ohne alles, das ist nämlich falsch. Habe ich vorgestern hier erst nen Link zu gepostet, warum das falsch ist. Leider hält sich dieses main() ohne alles aber sehr hartnäckig, selbst in der Fachliteratur :ugly:
 
Nun ja, das müsste mit VS2010 aber auch gehen. ;)

Mmh, kann es sein das die IDE nicht richtig eingestellt ist? Klick doch mal bitte im Menü auf Erstellen -> Projektmape neu erstellen.

Edit:
Es kann auch sein, dass es geht aber sofort wieder zu geht. ;)
 
Du hast ein Consolen-Programm geschrieben, also brauchst Du im Microsoft Visual Studio C++ Express 2010 erstmal ein Projekt für ein Consolen-Programm. Danach den zitierten Code (mit den bereits angemerkten Korrekturen) in den Main-Source einfügen (<name>.c bzw. <name>.cpp). Weiterhin hat die main-Funktion im C noch folge Parameter:

Code:
int main (int argc, char *argv[])
{
.
.
.
}
 
Also eine Projektmappe für Win32 Konsolenanwendung oder CLR Konsolenanwendung? Sorry wenn ich frage ist halt Neuland für mich :-)

Habe nochmals überprüft was ich eingetippt habe, ich habe keine Fehler gemacht beim eintippen
 
Code:
int main()
{
   // ...
   return 0;
}
oder
Code:
int main(int argc, char *argv[])
{
    // ...
    return 0;
}
Bitte nicht main() ohne alles, das ist nämlich falsch. Habe ich vorgestern hier erst nen Link zu gepostet, warum das falsch ist. Leider hält sich dieses main() ohne alles aber sehr hartnäckig, selbst in der Fachliteratur :ugly:
Wieso falsch?

Es ist nicht elegant, aber es funktioniert, und sollte auch kein Sicherheitsleck meiner Meinung nach darstellen. Der User kann halt als Parameter eingeben was er will. Es passiert halt nichts.

Wenn man schon die Sache mit der Parameterübergabe in der Main macht, dann sollte man meiner Meinung nach aber auch die Sache Abfangen, falls falsche/unnötige Angaben gemacht werden.


Win32 Konsolenanwendung. CLR ist für .net Code.
Jup genau so siehts aus.

Er wird aber weiterhin das Problem haben, dass das Fenster sofort zu geht.

Daher sollte er noch ein
Code:
return system("pause");
Da einfügen, wo er das Programm anhalten will, um die Ausgabe zu sehen :daumen:

PS: Ich würde kein printf etc. mehr Einsetzen. Für was gibt es in C++ cout und cin ;)

Gerade beim Einlesen von Daten per C-Befehlen kann man sich ja große Sicherheitslöcher aufreisen, da die Eingabe auch als Code ausgeführt werden kann!

Das sollte mit cin nicht möglich sein.
 
Und nochmal ein Link warum kein void main()...

Ich hatte letztens mal ein Programm, das sich wegen void main nicht kompilieren lies. Leider weiß ich aber nicht mehr, bei welchem Compiler das war. Mein VS2010 hat bei einem Test mit void main() gestern zwar genörgelt, aber das Programm trotzdem kompiliert.

System("pause") würde ich persönlich nicht nutzen, aber zum Testen ist es ok (wenn man Strg + F5 nicht findet bzw. keinen Breakpoint setzen will).
 
1. system() kann gefährlich sein (und es ist teuer, was im Falle von pause aber vernachlässigbar ist)
2. Konsolenprogramme werden bei mir immer noch über die CMD.exe aufgerufen, da braucht man kein Pause ;)
 
Ich hab nach dem lesen deines Links grad erst den Fehler gesehen, den du angesprochen hast :lol:

main()

ganz allein sollte natürlich nicht verwendet werden, sondern wie du geschrieben hast int main() zumindest. :daumen:
Hab das gar nicht gesehen, dass das int fehlt, sondern gedacht, das es dir um das argc... geht.

Zu dem return system("pause"); du hast ja selbst gesagt, dass es bei einem Stop im Programm ziemlich wayne ist. Ansonsten geb ich dir natürlich recht und würde das auf gar keinen Fall einsetzen!

Zu 2. Also ich starte die öfters eigentlich so, und geh davon auch aus, wenn ich die Sache an andere gebe. Das hat sich in der Windows Welt einfach eingebürgert. Funktioniert das mit der CMD.exe eigentlich wirklich immer? Ich glaube mich daran erinnern zu können, dass es nicht immer geht, kann mich da aber auch falsch erinnern.

Ich haus auf jeden Fall wirklich immer rein, in meine recht "kleinen" Programme aus der Uni, da ich mir einfach das Strg sparen will :D Bin da faul. Ich kompiliere das Zeug teils so oft, wegen kleiner Optimierungen, da hab ich keinen Bock auf Verrenkungen :D
 
Ich mache aus Gewohnheit schon alles mit der cmd.exe, da viele Programme halt wieder zupoppen und man nichts sieht. Zumindest war das meine Erfahrung, als ich damals auf cmd.exe umgestiegen bin ;)

zu void main():
For C++
The following are acceptable uses:
int main ( int argc, char *argv[] )
int main ()


The first option follows similar conventions to those used by C99.
The second option is used when you do not require access to the command line arguments, and is equivalent to the int main(void) option used by C99.
Again, the return type must always be an int, and the function should return 0; at the end, but it is not required by the standard.


What's the deal with void main()
Under regular function calling/returning in C and C++, if your don't ever want to return anything from a function, you define it's return type as void. For example, a function that takes no arguments, and returns nothing can be prototyped as:
void foo(void);
A common misconception is that the same logic can be applied to main(). Well, it can't, main() is special, you should always follow the standard and define the return type as int. There are some exceptions where void main() is allowed, but these are on specialised systems only. If you're not sure if you're using one of these specialised systems or not, then the answer is simply no, you're not. If you were, you'd know it.
Be warned that if you post your "void main" code on the forums, you're going to get told to correct it. Responding with "my teacher said it's OK" is no defence; teachers have a bad habit of being wrong. Be safe, and post only standard code, and you'll find people concentrate on answering your other problems, rather than waste time telling you about this type of thing.
Ich mag besonders den "my teacher said it's OK"-Teil :ugly:
 
Zuletzt bearbeitet:
hab ich doch schon gesagt dein Zitat :P

Aber es stimmt absolut. Nur weil etwas geht, ist es noch lange nicht richtig!
 
Zurück