Kontrollstrukturen mit scanf
-
Hi
erstmal ein beispiel:int input; scanf("%d",&input) if (input == 1 ) { //1 }
was mache ich wenn der user eine oder mehrere buchstaben eingibt?
Wie kann ich das abfangen?vielen dank im voraus
-
scanf liefert einen Wert zurück.
Der Betreff ist übrigens ... eigenwillig.
-
sorry ich wusste nicht was ich schreiben soll und ich will keinen langen text als titel
scanf liefert einen Wert zurück.
das weiss ich doch und?
-
maximo schrieb:
das weiss ich doch und?
Und? Warum wertest du ihn nicht aus?
-
aus man scanf:
RETURN VALUE These functions return the number of input items assigned, which can be fewer than provided for, or even zero, in the event of a matching fail- ure. Zero indicates that, while there was input available, no conver- sions were assigned; [b]typically this is due to an invalid input charac- ter, such as an alphabetic character for a `%d' conversion[/b]. The value EOF is returned if an input failure occurs before any conversion such as an end-of-file occurs. If an error or end-of-file occurs after con- version has begun, the number of conversions which were successfully completed is returned.
hth,
ciao
-
naja, ich hab grad meine notizen durchgegangen und ich kenn nur das
int check; check = scanf("%d",&input);
und ich kann die eingabe von check auswerten
-
hephaistos6 schrieb:
aus man scanf:
RETURN VALUE Zero indicates that, while there was input available, no conver- sions were assigned; [b]typically this is due to an invalid input charac- ter, such as an alphabetic character for a `%d' conversion[/b].
Das besagt, dass du den Rückgabewert von scanf testen kannst.
int eingabe; if(scanf("%d", &eingabe) == 0) { // Falsche Eingabe (zB Buchstaben) } else { // Richtige Eingabe }
-
ich kann noch kein richtiges englisch und ich wusste auch nicht wie ich es verwirklichen soll
danke schön
ich habe es eingebaut nur was ist wenn ich zahlen eingebe?
0 soll ja für buchstaben gelten aber was steht für die anderen zahlen? 1-20?unsigned int b; for (;;) { printf("\n-----------------------------------------\n"); printf("- 1 - Zeiger deklarieren, initialisieren\n"); printf("- 2 - Dereferenzierung\n"); printf("- 3 - Speichergroesse von Zeigern\n"); printf("- 4 - Zeigerarithmetik\n"); printf("- 5 - Zeiger auf Zeiger\n"); printf("- 0 - Schliesen\n\n"); printf("Geben Sie eine Zahl fuer Ihre Auswahl ein\n"); //printf("-----------------------------------------\n\n"); if (scanf("%d",&b) == 1) { int a = 10; int *zeiger1 = NULL; zeiger1 = &a; printf("%d = A\n",*zeiger1); printf("Zeigeradresse : %p\nVariablenadresse: %p\n",*zeiger1,a); } else if (scanf("%d",&b) == 2) { //- 2 - Dereferenzierung int *zeiger2 = NULL; // Zeiger int d,c = 5;; // Variable zeiger2 = &c; printf("Variable: %d %p\n",c,&c); printf("Zeiger : %d %p\n",*zeiger2,&zeiger2); *zeiger2 = 10; printf("Variable: %d %p\n",c,&c); printf("Zeiger : %d %p\n",*zeiger2,&zeiger2); c = *zeiger2; *zeiger2 = 100; printf("Variable: %d %p\n",c,&c); printf("Zeiger : %d %p\n",*zeiger2,&zeiger2); } else if (scanf("%d",&b) == 3) { //Speichergroesse von Zeigern char *zeiger3; int *zeiger4; float *zeiger5; double *zeiger6; printf("char = %d\nint = %d\nfloat = %d\ndouble = %d\n", sizeof(zeiger3),sizeof(zeiger4),sizeof(zeiger5),sizeof(zeiger6)); } else if (scanf("%d",&b) == 4) { //- 4 - Zeigerarithmetik int *pointer; int var = 11; printf("Variable: %d\n",var); pointer = &var; printf("Zeiger: %d = %p\n",*pointer, &pointer); pointer += 10; printf("Zeiger: %d = %p\n",*pointer, &pointer); } else if (scanf("%d",&b) == 5) { int *zeig1, *zeig2; int w = 20; zeig1 = &w; printf("Zeiger: %d Adresse: %p\n",*zeig1,&zeig1); zeig2 = zeig1; printf("Zeiger: %d Adresse: %p\n",*zeig2,&zeig2); } else if (scanf("%d",&b) == 0) { break; }
wenn ich 1-4 eingebe kriege ich immer nur das erste raus
-
@maximo
Es besteht ein Unterschied zwischen dem Rückgabewert von scanf() und dem übergebenen Parameter, in dem die Eingabe gespeichert wird.Der Rückgabewert von scanf() sagt dir nur, wieviele Zeichen umgewandelt werden konnten, was eingegeben wurde. Im Parameter steht, dann was genau eingegeben und umgewandelt wurde.
Beispiel:
check = scanf("%d", &input);
Du gibst die Zahl 3 ein. Der Rückgabewert (check) von scanf() ist 1 (=> eine Ziffer) und im Parameter (input) steht 3.
Beim zweiten mal gibst du ABC ein. Der Rückgabewert ist 0 (es wurde ja auch keine Ziffer eingegeben!) und im Parameter steht das was vorher schon drin stand (im Idealfall 0, weil du input mit 0 initialisiert hast, oder etwa nicht?!? ;)).
Zu guter letzt gibst du 406 ein. Der Rückgabewert ist jetzt 3 (=> drei Ziffern wurden eingegeben) und im Parameter steht natürlich die 406.
Ist es dir nun klarer?