2013-05-12 6 views
5

Ich schrieb ein einfaches Programm mit einer Funktion, die die Fläche eines Kreises berechnet. Das Programm fragt auch den Benutzer, ob er es erneut berechnen will und wenn die Eingabe 'N' ist, soll das Programm anhalten.do ... While-Schleife funktioniert nicht in Haupt

Hier ist der verengte unten Testfall:

#include<stdio.h> 
#include<string.h> 

int main(void) 
{ 
    float r; 
    char f; 
    do {  
     printf("Type the radius\n"); 
     scanf("%f", &r); 
     printf("Repeat? [Press N for stop]"); 
     scanf("%c", &f); 
    } while(f != 'N'); 
    getch(); 
    return 0; 
} 

aber die Schleife hört nie auf, wie es beabsichtigt war.

Haben Sie Vorschläge?

+0

Was genau bedeutet "nicht funktioniert" bedeuten? – interjay

+0

Wo ist While ??? –

+0

@KaranMer Es ist da. Schauen Sie genau hin, die Einrückung ist ein wenig herausfordernd: D – Maroun

Antwort

7

hinterlässt ein Newline-Zeichen im Eingabestream, das in der nächsten Iteration verbraucht wird. Fügen Sie ein Leerzeichen in der Formatzeichenfolge hinzu, um scanf() zu veranlassen, Leerzeichen zu ignorieren.

scanf(" %c", &f); // Notice the space in the format string. 
+0

Danke KingsIndian, sehr nützlich :) –

+0

Ich habe ein anderes Problem hier ... wenn ich Nummer eingeben, gibt es Laufzeitfehler:/ was kann ich tun ?? – Anklon

+0

@Anklon 'scanf()' ist im Allgemeinen nicht sehr gut für die Handhabung von * inkorrekten * Eingaben. Das Beste, was Sie tun können, ist, nach dem Rückgabewert zu suchen: 'if (scanf ("% c ", & f) == 1) {/ * Eingabe wurde erfolgreich durchgeführt * /} else {/ * Eingabe fehlgeschlagen * /}'. scanf() gibt die Anzahl der erfolgreich gescannten Eingaben zurück. –

2

ersetzen

scanf("%c", &f); 

mit

f=getch();