# Erstes C Programmierversuch und es klappt nicht



## Gamer090 (27. Juni 2011)

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 ?  Danke für eure Hilfe, will mal so als kleines Hobby ein bisschen Programmiern evtl. kommt irgendwas grösseres irgendwanm


----------



## bingo88 (27. Juni 2011)

```
int main()
{
   // ...
   return 0;
}
```
oder

```
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


----------



## Fragile Heart (27. Juni 2011)

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.


----------



## bingo88 (27. Juni 2011)

Fragile Heart schrieb:


> 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.
> 
> ...


 Genau, probier mal Strg+F5


----------



## AMD (27. Juni 2011)

Wenn irgendein Error kommt, am besten mal hierhin kopieren


----------



## mattinator (27. Juni 2011)

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:


```
int main (int argc, char *argv[])
{
.
.
.
}
```


----------



## Gamer090 (28. Juni 2011)

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


----------



## Fragile Heart (28. Juni 2011)

Gamer090 schrieb:


> Also eine Projektmappe für Win32 Konsolenanwendung oder CLR Konsolenanwendung? Sorry wenn ich frage ist halt Neuland für mich


Win32 Konsolenanwendung. CLR ist für .net Code.


----------



## Skysnake (28. Juni 2011)

bingo88 schrieb:


> ```
> int main()
> {
> // ...
> ...


 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. 




Fragile Heart schrieb:


> 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 

```
return system("pause");
```
Da einfügen, wo er das Programm anhalten will, um die Ausgabe zu sehen 

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.


----------



## bingo88 (28. Juni 2011)

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).


----------



## Skysnake (28. Juni 2011)

und was machst du, wenn du das Projekt auslieferst, soll der Windoof User auch Strg+F5 drücken


----------



## bingo88 (28. Juni 2011)

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


----------



## Skysnake (28. Juni 2011)

Ich hab nach dem lesen deines Links grad erst den Fehler gesehen, den du angesprochen hast 

main() 

ganz allein sollte natürlich nicht verwendet werden, sondern wie du geschrieben hast int main() zumindest.  
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  Bin da faul. Ich kompiliere das Zeug teils so oft, wegen kleiner Optimierungen, da hab ich keinen Bock auf Verrenkungen


----------



## bingo88 (28. Juni 2011)

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 ()
> ...


Ich mag besonders den "my teacher said it's OK"-Teil


----------



## Skysnake (28. Juni 2011)

hab ich doch schon gesagt dein Zitat 

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


----------



## bingo88 (28. Juni 2011)

Skysnake schrieb:


> hab ich doch schon gesagt dein Zitat
> 
> Aber es stimmt absolut. Nur weil etwas geht, ist es noch lange nicht richtig!


 Aso, dann hab ich das jetzt falsch verstanden 

Aber jetzt haben wir es auch noch mal hier, braucht man nicht mehr auf den Link klicken


----------



## Skysnake (28. Juni 2011)

Jup. 

Man kann es auch nicht oft genug sagen


----------

