NAS

C Abfrage mit nur positiven Werten

Registriert
Jan. 2008
Beiträge
232
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.

PHP:
#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
 
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.

PHP:
	do			
	{
		scanf("%lf", &eingabe);			
		fflush(stdin);
		if( eingabe < 0 )
		{
			printf("Fehleingabe, bitte Neueingabe: ");
		}
	}
	while( eingabe < 0 );
 
Ups, da hab ich es mir ja deutlich komplizierter gemacht, als ich wollte.
Danke, nun läuft das Programm.
 
statt

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

würde ich eher das standardkonformere

Code:
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.)
 
Zuletzt bearbeitet:
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.
 
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.
 
Zurück
Oben