You are not logged in.

  • Login

1

Tuesday, December 21st 2010, 11:31pm

Zahleneingabe in definiertem Wertebereich

Hallo,
ich möchte in einem Programm 10 Zahlenwerte einlesen. Diese Zahlenwerte sollen im Intervall -5 bis +5 liegen. Wie kann ich am besten diese Eingabe prüfen und bei falscheingabe die Eingabe wiederholen?

C/C++ Quellcode

1
2
3
4
5
6
7
8
anfang:
printf ("Bitte Wert zwischen +5 und -5 eingeben:\t");
scanf ("%d", &x);
 
 if (x>5 || x<-5)
 {
       goto anfang;
 }


Am einfachsten ist wohl dieser Spagethi Code. Irgendwioe befürchte ich das die Lösung ziemlich einfach ist aber mir fällt gerade nix besseres ein...

2

Tuesday, December 21st 2010, 11:49pm

uiiii peinlich^^
bin nochmal in mich gegangen und hab eine bessere lösung gefunden... vielleicht stellt sich ja irgendwann jemand genauso doof an und das hier hilft, ansonsten kanns gelöscht werden, wenn nicht gerade jemande noch ne viel bessere lösung hat :)

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
for (i=0; i<10; i++)
     {
         printf ("Bitte Wert zwischen +5 und -5 eingeben:\t");
         scanf ("%d", &x[i]);
 
         while(x[i]>5 || x[i]<-5 || x[i]==0)
         {
                   printf ("\n\nFALSCHE EINGABE\a");
                   printf ("\nBitte Wert zwischen +5 und -5 eingeben:\t");
                   scanf  ("%d", &x[i]);
         }
     }

3

Wednesday, December 22nd 2010, 7:22am

Kürzer mit einer do-while-Schleife:

C/C++ Quellcode

1
2
3
4
do {
    printf("\nBitte einen Wert zwischen +5 und -5 eingeben:\t");
    scanf("%d", &x);
} while(x > 5 || x < -5)

4

Wednesday, December 22nd 2010, 10:06am

hallo,

du hast es ja aneinscheinend schon selbst erkannt, aber trotzdem nochmal also tip von mir:
lasst "goto" weg! vergiss das es goto gibt und leugne das es existiert :)
goto = böse.

thx, truespin

5

Wednesday, December 22nd 2010, 1:35pm

so never ending story :) gibt immer was zu verbessern :) hab die überprüfung jetzt ausgelagert in eine funktion...

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
int int_interval(int value, int upper_limit, int lower_limit)
{
	while (value > upper_limit || value < lower_limit)
		{
			printf("FALSCHE EINGABE!\nWerte im Bereich %d bis %d eingeben.", upper_limit, lower_limit);
			printf("Neuen Wert eingeben:\t");
			scanf("%d", &value);
		}
	return value;
}


meine frage: ich habe versucht den übergabeparameter sowie den return wert der fkt als float value zu deklarieren. aber aus dem hauptprogramm einen int wert zu übergeben. das funktioniert allerdings nicht so ohne weiteres. ist es möglich einer fkt die float erwartet trotzdem int zu übergeben?

btw: kann mir jemand einen editor mit syntax hervorhebung empfehlen? also wirklich nur einen editor ohne compiler oder sonstigen schnickschnack.

6

Wednesday, December 22nd 2010, 4:34pm

Hast du dir überhaupt mal meinen Code angeschaut? Dein Code ist mit zwei separaten Abfragen doch recht redundant.

7

Wednesday, December 22nd 2010, 7:09pm

ja den habe ich angeschaut, aber wenn ich das problem in ein unterprogramm auslagern möchte kann ich die do-while schleife nicht benutzen, da die abfrage dann 2 mal stattfinden würde. auch wenn die erste eingabe im richtigen intervall war.

was bedeutet, dass mein code redundant ist?

8

Wednesday, December 22nd 2010, 7:38pm

da die abfrage dann 2 mal stattfinden würde. auch wenn die erste eingabe im richtigen intervall war.

Nein?
was bedeutet, dass mein code redundant ist?

Die Zeilen 3+4 und 9+10 in deinem zweiten Code machen genau das selbe. Diese Wiederholung könntest du dir so einsparen.

9

Wednesday, December 22nd 2010, 8:25pm

wenn ich das berücksichtige was in meinem main() steht bleibe ich bei mieiner aussage :P
wenn ich aber mein main() an deinen code anpasse spare ich mir tatsächslich nochmal zwei zeilen :) was wohl dazu führt das ich meine vorherige aussage leugne und das gegenteil behaupte^^

eine frage ist bisher noch unbeantwortet geblieben, kann ich einer funktion die float oder double erwartet irgendwie einen int wert übergeben, sodass die funktion dann auch noch das tut was ich möchte?

Similar threads

Social bookmarks