PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C Abfrage mit nur positiven Werten



Jabba the Playa
19.04.2012, 22:47
Schönen guten Abend. Ich habe hier gerade ein Programm geschrieben, welches eine Abfrage von Werten startet. Die Werte sollen alle aber nur positiv sein.
Außerdem irritiert es mich, dass wenn ich den Wert "a" eingebe, eine Neueingabe gefordert wird, bei dem Wert "1a" aber nicht mehr.
Ich hoffe hier kann mir einer helfen.


#include <stdio.h>

double eingabe()
{
double eingabe;
int positiv;

do
{
positiv = scanf("%lf", &eingabe);
fflush(stdin);
if(positiv != 1)
{
printf("Fehleingabe, bitte Neueingabe: ");
}
}
while(positiv != 1);
return eingabe;
}

void main(void)
{
double x;
printf("Bitte geben sie x ein: ");
x=eingabe();
printf("x ist &lf ", x);
}


Arbeite mit dem Microsoft Visual Studio 2010

DaysShadow
19.04.2012, 22:53
scanf gibt dir die Anzahl der eingelesenen Werte zurück, nicht ob die Eingabe positiv war.

Frag doch einfach eingabe auf >= 0 ab und wenn das nicht der Fall ist frage erneut nach der Eingabe.

"a" geht nicht als Eingabe weil es ein char ist und du aber einen double einlesen willst.
Bei "1a" wiederum gibt es ja eine Zahl die verarbeitet werden kann.


do
{
scanf("%lf", &eingabe);
fflush(stdin);
if( eingabe < 0 )
{
printf("Fehleingabe, bitte Neueingabe: ");
}
}
while( eingabe < 0 );

Jabba the Playa
19.04.2012, 23:06
Ups, da hab ich es mir ja deutlich komplizierter gemacht, als ich wollte.
Danke, nun läuft das Programm.

1668mib
20.04.2012, 11:38
statt



scanf("%lf", &eingabe);
fflush(stdin);


würde ich eher das standardkonformere



scanf(" %lf", &eingabe);

machen...
(Zumal es eh sinnvoller ist, vor einer Eingabe den Keyboard-Buffer zu leeren als danach. Wenn sonst irgendwo das leeren nach der Eingabe vergessen wird, entsteht das Problem möglicherweise an einer ganz anderen Stelle. Deshalb einfach beim Einlesen selbst Sorge tragen, das keine ungewollten Zeichen mehr im Buffer sind.)

Jabba the Playa
21.04.2012, 11:13
Ich lass das lieber drin, weil das Programm bei der Eingabe eines Buchstaben sonst nicht mehr richtig arbeitet.

Er bittet um eine Neueingabe, durch die Schleife lädt er es aber immer wieder neu. Durch den Löschen des Buffers kann ich dann erst eine Neueingabe starten.

Razor1990
01.05.2012, 17:41
fflush ist aber nicht für eingabestreams definiert.

besser wäre sowas wie
[CODE]
char t;
while((getchar() =t)!= '\n' || t !=EOF){}
[\CODE]

dann liest er solange aus bis ein newline oder ein ende des streams kommt. in den meisten fällen ist der Buffer dann wirklich leer. und dies funktioniert auf allen platformen.