Nur Integer Eingabe zulassen



  • Hi Leute,
    in meinem kleine Programm möchte ich vom User wissen wie oft eine Schleife, die an der Stelle mal nicht interessiert, durchlaufen werden soll.
    Da macht selbstverständlich nur eine ganze Zahl sinn.
    Also möchte ich verhindern dass eine Float Zahl eingegeben wird.
    Mein Ansaz funktioniert nur teilweise.

    #include <stdio.h>
    #include <math.h>
     double fmod (double n, double denumerator);
    
    int main(void)
    {
    	double n, denumerator, restkomma;
    
    	do
    	{
    
    		printf ("Maximale Zahl von Halbierungen:\n");
    		scanf("%f", &n);
    		denumerator=2;
    		restkomma = fmod(n, denumerator);
    		printf("%f",restkomma);
    	}
    	while(restkomma!=0);
    

    Leider sind bei sehr großen Zahlen die Reste von Modulo z.B. 0.09....
    was ja also 0 ausgegeben wird.
    Und genau da versagt meine Schleife.
    Habt ihr da einen Tipp?
    Vielen Dank!!! 🙂



  • Wenn du einen int willst solltest du auch einen int einscannen.



  • ...



  • Auch wenn du eine andere Lösung brauchst:

    neonlogist schrieb:

    double n, denumerator, restkomma;
    ...
    scanf("%f", &n);
    

    %f ist bei scanf zum einlesen von einem float da. Also erwartet es auch einen Zeiger auf eine float -Variable.
    Wenn du double einlesen willst, musst du %lf nehmen.



  • int	read_stdin ( char* buf, int bufsize )
    {
    	return NULL == fgets ( buf, bufsize, stdin );
    }
    
    int integer_from_string ( char* s, int* integer )
    {
    	return 1 != sscanf ( s, "%d", integer );
    }
    
    int main ( void )
    { 
    	char buf[BUFSIZ];
    	int integer;
    
    	printf ( "%s", "Integer input: ");
    	while ( read_stdin ( buf, sizeof ( buf )) || integer_from_string ( buf, &integer ))
    		printf ( "%s", "Invalid input, try again: " );
    
    	return 0;
    }
    

Anmelden zum Antworten