Frage zur Standardeingabe



  • Hallo!

    Ich habe eine Frage. Bei folgendem Programmkonstrukt soll sichergestellt werden, dass nur Zahlen eingelesen werden.

    while(scanf("%d", &sel_op) !=1)
    		{/* Wenn scanf keine reine Zahl liefert */
    			int c;
    		  	while((c = getchar()) != EOF)
    		    	{
    		      		if(isdigit(c))
    		      		{
    			      		ungetc(c, stdin); 
    			      		break;
    		      		}
    		     	}
    		}
    

    Was ich nicht verstehe: Mit scanf liest man doch von der Standardeingabe. Anschließend liest getchar aber nochmal das erste Zeichen, obwohl scanf es doch schon eingelesen hat.

    In diesem Beispiel:

    int a;
    	scanf("%d", &a);
    	int b = getchar();
    	putchar(b);
    

    ... liefert getchar kein Zeichen mehr, weil scanf es ja schon von der Standardeingabe geholt hat. Das ist ja auch logisch, aber warum ist das im oberen Beispiel nicht genauso?



  • Du musst doch nur überprüfen, was scanf zurückgibt. Der Rückgabewert ist nämlich die Anzahl gelesener passender Ausdrücke, in deinem Fall also Zahlen. Wenn die Rückgabe 0 ist, wurde eben keine Zahl eingegeben.


Anmelden zum Antworten