2016-11-05 6 views
-2

whileループでエラーが発生します。int getInt(void) ループして数字を入力するようにしたいので、10を入力した場合と同じようにループしますが、ループして再度質問し、有効な入力が行われるまで質問し続ける必要があります。それは絶対確実でなければならないので、それはそれ自身で数字を渡すだけです。何らかの理由で、whileループ内のprintf文が無限ループし、新しい値を入力できません。whileステートメントエラーfool proof

{#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 - コメントアウト主なものは以下のテスタープログラムを完全に実行する必要があるマイルストーン1 // 2 - あなたの最後のマイルストーンを提出。 //メインをコメントアウト*/

//ダウンここでのマイルストーン1のために、あなたの関数を実装矢印

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; 
} 

/*終了後に次の2つの文字を削除)(メインをコメントアウトします: void welcome(void) { printf( "--- ===食料品目録システム=== --- \ 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

これはhttp://stackoverflow.com/と同じであるように思わ質問/ 40432191/c-infinite-loop-error – Barmar

+0

これは別のエラーでした –

+0

コードを正しくフォーマットしてください。そして、「提出するときにコメントを主張する」ということについて、何がポイントですか? – Barmar

答えて

0

tsk tsk jason。アウトラインを読んでフローチャートを見てください。あなたは "clrKyb();を追加する必要がありますwhileループに追加します。

も明確な文字が関数はstdio.hのライブラリに含ますでにある。(これは私たちの教科書やオンラインノートに文字通りある)

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 ; 
} ; 
関連する問題