switch-Anw. für Abbruch oder wiederholen benutzen
-
Hallo, ich arbeite mich gerade durch ein Anfänger Tutorial und bin dort bei der switch-Anw. angelangt. Nun versuche ich mit "switch" am Ende eines Programms eine Abfrage zu definieren, die mir das Programm, bei Eingabe von "j" neu starten lässt oder bei Eingabe von "n" abbrechen lässt. Mein Problem besteht darin, dass ich keine Idee hab wie ich dem Programm sagen soll, dass es wieder von vorn beginnen soll. Ich kann mir schon vorstellen dies mit einer Schleife zu realisieren, nur wollt ich mal grundsätzlich wissen, ob dies auch mit "switch" (ohne Schleife) funktionieren könnte.
# include <stdio.h> int i, m, q; double h, g=1, f=1 ; char eingabe, j, n; int main (void) { printf("Die Fibonacci-Zahlen!\n\n"); printf("Geben sie eine Zahl ein, um zu erfahren welche\n"); printf("Fibonaccizahl an dieser Stelle steht\n\n"); scanf("%i", &m); for (i=0; i<m-2; ++i) { h=g; g=f; f=g+h; } printf("\n\nAn der Stelle %i befindet sich die Fibonacci-Zahl %.0f", m, f); printf("\n\nWollen Sie eine weitere Fibonaccizahl berechnen?\n\n"); printf("JA (j) \tNEIN (n)"); scanf("%c", &eingabe); switch (eingabe) { case j: case n: return 0; } scanf("%i", &q); }
mit bestem Gruß ...
-
Um die Schleife und die ganze Rechnerei kommst du wohl nicht rum, ausser du nutzt
goto´s, aber das ist unschön! Ohne switch-Anweisung wäre dein Vorhaben evtl. übersichtlicher.
machs´s z.B. so:int main(void) { while ( again != 'n' ) { ... scanf("%c", &again); } return 0; }
Das Switch-Konstrukt ist eine Mehrfachauswahl und kann
Schleifen nicht ersetzen!
-
du könntest auch die berechnung in eine funktion packen und dann...
switch (eingabe) { case 'n': exit (...); case 'j': fibonacci(); break; default: puts ("huh?"); break; }
-
Ich hab es erstmal mit do-while realisiert, obwohl das auch noch nicht das gelbe vom Ei ist.
int main (void) { do { ... printf("\n\nWollen Sie eine weitere Fibonaccizahl berechnen?\n\n"); printf("JA (1) \tNEIN (beliebig)"); scanf("%i", &eingabe); if (eingabe!=1) return 0; } while (eingabe==1); }
Die Abfrage würd ich gern mit 'j' als char umsetzen, nur leider funzt die Schleife nur wenn die Abfrage ein integer ist. Das ist bestimmt ein typischer Anfängerstolperstein.
int i, m, q; double h, g=1, f=1 ; char eingabe, j; int main (void) { do { ... printf("\n\nWollen Sie eine weitere Fibonaccizahl berechnen?\n\n"); printf("JA (j) \tNEIN (beliebig)"); scanf("%c", &eingabe); if (eingabe!='j') return 0; } while (eingabe=='j'); }
Warum akzeptiert das Programm die Bedingung mit char 'j' nicht? Komm da grad echt nicht weiter.
-
#include <stdio.h> int main(void) { char eingabe; do { printf("Blub "); printf("\nNoch ein Blub? "); scanf("%c", &eingabe); while (getchar()!='\n'); }while( eingabe == 'j' ); return 0; }
while (getchar()!='\n'); ist nötig, um das '\n' aus der Inputqueue zu entfernen.
-
meine Abfrage funktioniert immer noch nicht. wie oben schon erwähnt, gibt es nur probleme wenn die Abfrage mit einem char erfolgen soll. mach ich hingegen die abfrage mit integer funzt alles problemlos. hier nochmal der code mit der char variante. vielen dank im voraus!
# include <stdio.h> int i, m, q; double h, g=1, f=1 ; int main (void) { char eingabe; do { printf("Die Fibonacci-Zahlen!\n\n"); printf("Geben sie eine Zahl ein, um zu erfahren welche\n"); printf("Fibonaccizahl an dieser Stelle steht\n\n"); scanf("%i", &m); for (i=0; i<m-2; ++i) { h=g; g=f; f=g+h; } printf("\n\nAn der Stelle %i befindet sich die Fibonacci-Zahl %.0f", m, f); printf("\n\nWollen Sie eine weitere Fibonaccizahl berechnen?\n\n"); printf("JA (j) \tNEIN (beliebig)"); scanf("%c", &eingabe); while(getchar()!= 'j'); } while(eingabe == 'j'); return 0; }
-
guck dir mal den beitrag von curry-king an, das mit dem 'while (getchar()!='\n');'
-
... printf("Die Fibonacci-Zahlen!\n\n"); printf("Geben sie eine Zahl ein, um zu erfahren welche\n"); printf("Fibonaccizahl an dieser Stelle steht\n\n"); scanf("%i", &m); while (getchar() != '\n') ; ... printf("\n\nAn der Stelle %i befindet sich die Fibonacci-Zahl %.0f", m, f); printf("\n\nWollen Sie eine weitere Fibonaccizahl berechnen?\n\n"); printf("JA (j) \tNEIN (beliebig)"); scanf("%c", &eingabe); while (getchar() != '\n') ; ...
Du solltest schon _genau_ lesen was andere schreiben. while(getchar()!='j') war nicht gefordert
Diese While-Schleife mit Semikolon sorgt dafür dass Deine Return-Taste nicht in eingabe landet.
-
LordJaxom schrieb:
Du solltest schon _genau_ lesen was andere schreiben. while(getchar()!='j') war nicht gefordert
komisch... und wieso geht dann mit int (wie er schreibt)? aber hast schon recht, den quelltext habbich mir nicht angekuckt
-
net schrieb:
komisch... und wieso geht dann mit int (wie er schreibt)? aber hast schon recht, den quelltext habbich mir nicht angekuckt
weil scanf("%i",&var) alle whitespaces (inklusive '\n') automatisch überliest - scanf("%c",&var) holt sich dagegen nur ein Zeichen aus dem Eingabepuffer, deshalb müssen vorher eventuelle Reste der früheren Eingabe aufgeräumt werden.
-
so richtig kann ich das zwar nicht nachvollziehen mit dem zweifach
while (getchar() != '\n');
aber Dank eurer Hinweise, hab ich jetzt ein wenig mehr Ahnung. Bis die Tage