Das Grundgerüst lautet immer wie folgt:
Code:
int main()
{
return 0;
}
Dein Programm liefert beim Kompilieren folgendes:
Code:
$ gcc -Wall test.c
test.c:3:1: warning: return type defaults to ‘int’ [-Wreturn-type]
test.c: In function ‘main’:
test.c:16:1: warning: control reaches end of non-void function [-Wreturn-type]
Also schon einmal zwei Tipps:
- Benutze etwas Ordentliches zum Lernen. Für den Anfang ist C von A bis Z imho ausreichend. Zumindest sind dort die main-Funktionen korrekt beschrieben.
- Lass die Finger von Dev-C++. Alt, verbuggt und schon seit Ewigkeiten nicht mehr weiterentwickelt (außer natürlich, ich habe da was nicht mitbekommen). Zumindest habe ich schon gruseligen Code gesehen, der dort ohne Fehler kompilieren konnte - damit wirst Du langfristig nicht glücklich. Dann lieber gcc auf cygwin, Code::Blocks oder auch Visual Studio. Letzteres ist zwar Kanone auf Spatze, aber selbst in der Express-Version mächtig genug.
Zu Deinem Programm:
"scanf" liefert einen Wert zurück. Nutze ihn! Ansonsten kannst Du Dir nicht sicher sein, ob überhaupt ein Wert eingelesen wurde und Deine Variable befindet sich vielleicht in einem undefinierten Zustand.
Desweiteren liest "scanf" nur den Format-String ein - nicht mehr, vielleicht weniger (siehe Rückgabewert). D.h., dass der Zeilenumbruch, welcher zum Abschluss der Eingabe eingegeben werden muss, nicht eingelesen wird und noch immer im Eingabepuffer steckt. Dass überhaupt "y" noch eingelesen werden kann, ist schon Glückssache. Im schlimmsten Fall schließt Du die Eingabe für "x" mit Enter ab - das erste "scanf" liest lediglich die eingebene Zahl. Die nachfolgenden "scanf" lesen direkt das Enter aus dem Eingabepuffer, aber keine Zahl ein.
Du musst also den Eingabepuffer leeren, bevor Du wieder etwas einlesen kannst. Solltest Du jemals zu diesem Zweck "fflush()" empfohlen bekommen: niemals nutzen - das Verhalten von "fflush()" ist auf Eingabeströmen undefiniert. Besser wäre es bspw. den Puffer nach jedem "scanf" folgendermaßen zu leeren:
Code:
while((c = getchar()) != '\n' && c != EOF)
{
/* discard */ ;
}
Am besten verzichtest Du aber bei größeren Experimenten ganz auf "scanf" und nutzt lieber "fgets" oder auch "getchar".