2016-11-05 5 views
-2

Der Fehler tritt in der While-Schleife bei int GetInt (void) Ich möchte Schleife und frage den Benutzer eine Zahl eingeben, so wie wenn sie Eingabe 10 würde es passieren, aber wenn sie es waren Eingabe 10abc sollte es Schleife und fragen Sie erneut und fragen Sie weiter, bis eine gültige Eingabe gemacht wird. Es sollte narrensicher sein, so dass es nur mit einer Nummer allein passieren wird und das ist es. Aus irgendeinem Grund wird die printf-Anweisung in der while-Schleife unendlich oft wiederholt und ich kann keinen neuen Wert eingeben.während Anweisung Fehler narrensicher

{#include <stdio.h> 

void welcome(void); 
int getInt(void); 
double getDbl(void); 
void prnTitle(void); 
void prnFooter(double gTotal); 
void pause(void); 
double getDblLimited(double lowerLimit, double upperLimit); 

// 1- Kommentar Haupt, wenn Meilenstein Einreichen ein // 2- Ihren letzten Meilenstein sollte man perfekt mit dem folgende Tester-Programm ausführen. // Um ​​den main() löschen Sie die nächsten zwei Zeichen nach dem Pfeil

int main(void) 
{ 
int iVal; 
double dVal; 
welcome(); 

// testing prnTitle() 
printf("listing header and footer with grand total:\n"); 
prnTitle(); 

printf(""); 

// Testing prnFooter() 
prnFooter(1234.5678); 
printf("listing header and footer without grand total:\n"); 
prnTitle(); 
prnFooter(-1); 


// Testing Pause() and clrKyb() 
pause(); 


// Testing getInt() 
printf("Enter an integer: "); 
iVal = getInt(); 
printf("You entered: %d\n", iVal); 


// Testing Get Int Limited 
printf("Enter an integer between 10 an 20: "); 
iVal = getIntLimited(10, 20); 
printf("Your entered %d\n", iVal); 


// Testing Get Double 
printf("Enter a floating point number: "); 
dVal = getDbl(); 
printf("You entered: %0.2lf\n", dVal); 


// Tesing Get Double Limited 
printf("Enter a floating point number between 10.00 an 20.00: "); 
dVal = getDblLimited(10.0, 20.0); 
printf("You entered: %0.2lf\n", dVal); 



printf("End of tester program for milestone one!\n"); 
return 0; 
} 

/* Ende aus einem Kommentar des Haupt out */

// implementieren Ihre Funktionen für Meilenstein einer hier unten auf Kommentar: void welcome (void) { printf ("--- === Inventar Inventar System === --- \ n");

} 

void prnTitle(void) 
{ 
printf("Row |SKU| Name \t | Price |Taxed| Qty | Min | Total |Atn \n"); 
printf("----+---+--------------------+--------+-----+-----+-----+------------+|---\n"); 

} 
void prnFooter(double gTotal) 
{ 
printf("--------------------------------------------------------+-----------------\n"); 
//float gTotal = 1234.57; 
if (gTotal > 0) 
{ 
    printf("%12.21f", gTotal); 
} 
else 
{ 
    printf(""); 
} 

} 
void clrKyb(void) 
{ 
char b; 
while (b != '\n') 
{ 
    scanf("%c", &b); 
} 

} 
void pause(void) 
{ 
printf("Press <Enter> to continue..."); 

clrKyb(); 

} 
int getInt(void) 
{ 
//printf("Enter an interger:"); 
int d; 
char c; 
scanf("%d%c", &d, &c); 
while (c != '\n') 
    { 
     printf("Invalid integer, please try again"); 
     scanf("%d%c", &d, &c); 
    } 


    return d; 
} 


int getIntLimited(int lowerLimit, int upperLimit) 
{ 
int a; 
//printf("Enter an integer between %d and %d:", lowerLimit, upperLimit); 
scanf("%d", &a); 
while (a <= lowerLimit || a >= upperLimit) 
{ 
    // printf("Invalid value, %d < value < %d:", lowerLimit, upperLimit); 
    scanf("%d", &a); 
} 
return a; 
} 
double getDbl(void) 
{ 
double d; 
char c; 
// printf("Enter a floating point number:"); 
scanf("%lf,%c", &d, &c); 
while (c != '\n') 
{ 

    printf("Invalid number, please try again "); 
    scanf("%lf,%c", &d, &c); 
} 
return d; 
} 

double getDblLimited(double lowerLimit, double upperLimit) 
{ 
double a; 
printf("Enter a floating point number between %f and %f:", lowerLimit, upperLimit); 
scanf("%lf", &a); 
while (a <= lowerLimit || a >= upperLimit) 
{ 
    printf("Invalid value, %f < value < %f:", lowerLimit, upperLimit); 
    scanf("%lf", &a); 

} 
return a; 
return 0; 
} 
+0

Dies scheint das gleiche zu sein, wie http://stackoverflow.com/ Fragen/40432191/c-endlos-loop-Fehler – Barmar

+0

Das war ein anderer Fehler –

+0

Bitte formatieren Sie Ihren Code richtig. Und was ist der Sinn des Krams über "Kommentieren beim Senden"? – Barmar

Antwort

0

tsk tsk jason. Lesen Sie den Überblick und schauen Sie sich das Flussdiagramm an. Sie müssen die "clrKyb();" in die While-Schleife.

auch klare Zeichen sind bereits eine Funktion in stdio.h Bibliothek enthalten. (Das ist buchstäblich in unserem Lehrbuch und Online-Notizen)

void clrkyb(void) 
{ 
    while(getchar() != '\n'); 
} ; 

int getInt(void) 
{  
    int d ; 
    char c ; 

    scanf("%d%c", &d, &c); 

    while(c != '\n') 
     { 
     clrKyb(); 
     printf("Invalid"...": "); 
     scanf("..." &..); 
     } 
    return d ; 
} ;