typen check und array mit mehrern Strings
-
Hallo zusammen,
ich hab da momentan zwei probleme wo ich nicht mehr weiterkomme.
Wahrscheinlich nicht wirklich wild, aber mir fehlt grad einfach der zündende Gedanke.also mal zum ersten:
folgende Funktion, soll nichts weiter machen als zwei Zahlen zu addieren, was auch kein Problem ist. Mein Problem liegt darin das ich ncoh überprüfen will ob es sich bei den eingegebenen Werten auch wirklich um Zahlen und nicht um Zeichen handelt.
Die funktion sieht bisher so aus:double addition (void) { printf("Bitte geben Sie die zu addierenden Werte ein: "); ret = scanf ("%le %le",&b,&c); if(ret!=2){ do{ printf("falsch"); ret = scanf ("%le %le",&b,&c); }while(ret!=2); }else{ printf("%.3f + %.3f = %.3f\n",b,c,(b+c)); } return 0; }
das problem ist das ich eine endlosschleife bekomme die mir immer "falsch" ausgibt. ich versteh grad nicht wie ich diese sinnvoll unterbrechen kann. wollte das erst über isdigit machen, da ich aber double benutz geht das ja leider nicht. ich hoffe ihr könnt mir helfen.
Mein zweites Problem ist nicht ganz so simple.
Hierbei handelt es sich um eine Ausgabe welche ich gern über ein array realiesieren würde.
Das ganze soll wie folgt ablaufen:Ich habe eine Aufzählung von z.b. 3 worten. "wort1","wort2","wort3" welche mit folgender schleife untereinander angezeigt werden sollen:
for(i=1;i<=anzahl;i++){ printf("%d. %c\n",i,beschreibung[i]); }
in mein array "beschreibung" würd ich jetzt gern die einzelnen werte packen.
Das problem ist nur das dass ganze so oder auch mehrdimensional nicht geht.
Ich habe mir überlegt pointer auf die einzelnen Worte zu legen und diese dann auszulesen aber das hat leider auch nicht geklappt. ich hoffe ihr könnt mir dabei helfen.danke
oli
-
ret = scanf ("%f %f",&b,&c);
Hiermit müsste es klappen!
-
ne, klappt nicht.
der fehler is wohl eher in der logik.
ob ich mit f oder le einlese is ja egal.
das spielt ja keine rolle..........hm, schade...........
-
habs jetzt:
die falsche Eingabe blockiert stdin. Du musst Sie flushen:
double addition (void) { printf("Bitte geben Sie die zu addierenden Werte ein: "); ret = scanf ("%le %le",&b,&c); if(ret!=2){ do{ printf("falsch"); fflush(stdin); ret = scanf ("%le %le",&b,&c); }while(ret!=2); }else{ printf("%.3f + %.3f = %.3f\n",b,c,(b+c)); } return 0; }
Dadurch gehen die Buchstaben, die falsch eingelesen wurden weg!
-
Hallo!
Du machst dir das viel zu kompliziert mit den Schleifen. Du brauchst eigentlich nur eine. Die Variable ret, die du benutzt, brauchst du nicht in deinem Kontext. Du kannst das Ergebnis der scanf()-Funktion direkt mit der 2 vergleichen.
Und mit rewind(stdin). Das ist so wie das flush().
double addition (void) { double b,c; printf("Bitte geben Sie die zu addierenden Werte ein: "); while(scanf ("%le %le",&b,&c)!=2) { printf("falsch!\nNeue Eingabe: "); rewind(stdin); // Eingabepuffer löschen, also Eingabe von vorne } printf("%.3f + %.3f = %.3f\n",b,c,(b+c)); return 0.0; }
Und das zweite:
int i; char *beschreibung[3] = {"wort2","wort2","wort3"}; for(i=0;i<=2;i++){ printf("%d. %s\n",i,beschreibung[i]); }
Du musst %s bei der Ausgabe verwenden, dann gibt printf() bis zum nächsten '\0' also bis zum NULL-Zeichen aus. So werden C-Strings ja abgeschlossen.
Mit %c gibst du nur ein einzelnes Charakter aus, also nur einen Buchstaben.mfg
cbk
-
@cbk
Ich glaub da hat sich ein Fehler eingeschlichen beim Zweiten. Müsste es anstatt [3] nicht [6] sein?
-
super.
hat alles geklappt.
vielen dank