2016-11-13 10 views
1
void clrKyb(void) { 
    char input = ' '; 
    do { 
     scanf("%c", &input); 
    } while (input != '\n'); 
} 

void pause(void) { 
    //Pause the program as until the user presses enter 
    printf("Press <ENTER> to continue..."); 
    clrKyb(); 
} 

int main() { 
    struct Item I[21] = { 
     { 4.4, 275, 0, 10, 2, "Royal Apples" }, 
     { 5.99, 386, 0, 20, 4, "Watermelon" }, 
     { 3.99, 240, 0, 30, 5, "Blueberries" }, 
     { 10.56, 916, 0, 20, 3, "Seedless Grapes" }, 
     { 2.5, 385, 0, 5, 2, "Pomegranate" }, 
     { 0.44, 495, 0, 100, 30, "Banana" }, 
     { 0.5, 316, 0, 123, 10, "Kiwifruit" }, 
     { 4.49, 355, 1, 20, 5, "Chicken Alfredo" }, 
     { 5.49, 846, 1, 3, 5, "Veal Parmigiana" }, 
     { 5.29, 359, 1, 40, 5, "Beffsteak Pie" }, 
     { 4.79, 127, 1, 30, 3, "Curry Checken" }, 
     { 16.99, 238, 1, 10, 2, "Tide Detergent" }, 
     { 10.49, 324, 1, 40, 5, "Tide Liq. Pods" }, 
     { 10.99, 491, 1, 50, 5, "Tide Powder Det." }, 
     { 3.69, 538, 1, 1, 5, "Lays Chips S&V" }, 
     { 3.29, 649, 1, 15, 5, "Joe Org Chips" }, 
     { 1.79, 731, 1, 100, 10, "Allen's Apple Juice" }, 
     { 6.69, 984, 1, 30, 3, "Coke 24 Pack" }, 
     { 7.29, 350, 1, 50, 5, "Nestea 24 Pack" }, 
     { 6.49, 835, 1, 20, 2, "7up 24 pack" } 
    }; 
    double val; 
    int ival; 
    int searchIndex; 
    val = totalAfterTax(I[0]); 
    printf("totalAfterTax:\n" 
      " yours=%lf\n" 
      "program's=44.000000\n", val); 
    val = totalAfterTax(I[7]); 
    printf("totalAfterTax:\n" 
      " yours=%lf\n" 
      "program's=101.474000\n", val); 
    ival = isLowQty(I[0]); 
    printf("isLowQty:\n" 
      " yours=%d\n" 
      "program's=0\n",ival); 
    ival = isLowQty(I[14]); 
    printf("isLowQty:\n" 
      " yours=%d\n" 
      "program's=1\n",ival); 
    pause(); 

    printf("itemEntry, enter the following values:\n"); 
    printf("  SKU: 999\n" 
      "  Name: Red Apples\n" 
      "  Price: 4.54\n" 
      " Quantity: 50\n" 
      "Minimum Qty: 5\n" 
      " Is Taxed: n\n"); 
    printf("Enter the values:\n"); 
    I[20] = itemEntry(999); 
    printf("dspItem, Linear:\nYours: "); 
    dspItem(I[20], LINEAR); 
    printf(" Prog: |999|Red Apples   | 4.54| No| 50 | 5 |  227.00|\n"); 
    printf("dspItem, Form:\nYours:\n"); 
    dspItem(I[20], FORM); 
    printf("Programs: \n"); 
    printf("  SKU: 999\n" 
      "  Name: Red Apples\n" 
      "  Price: 4.54\n" 
      " Quantity: 50\n" 
      "Minimum Qty: 5\n" 
      " Is Taxed: No\n"); 
    I[20].quantity = 2; 
    I[20].isTaxed = 1; 
    pause(); 

    printf("dspItem, Linear with low value and taxed:\nYours: "); 

    return 0; 
} 

メインの最後の2行を実行しようとすると、一時停止機能が呼び出され、Enterキーを押すようにユーザーに指示し、ユーザーがEnterキーを押さない限り、プログラム内を進めません。なんらかの理由で、Enterキーを押すと、一時停止機能からのプロンプトとprintf文の文字列が同じ行に印刷されます。一時停止は、ユーザーが入力を押すのを待つので、別の行に印刷することになっていませんか?それは最後に実行される前にそれを隔てて行いますが、なぜ関数の一時停止が呼び出された最後にそれをやっていますか?前もって感謝します。入力バッファをクリアすると、なぜ新しい行に移動しないのですか?

出力は次のようになります。入力はstdinから要求されたときにいくつかの理由"Press <ENTER> to continue...dspItem, Linear with low value and taxed:"

+1

'' pause'で 'printf'の後に' fflush(stdout) 'を追加してみてください。 'printf'はデフォルトでバッファされた行です。したがって、改行または明示的な ''フラッシュ ''になるまで端末に出力されません。 – kaylum

+0

実行時の問題について質問したときに(とりわけ)、きちんとコンパイルされたポストコードがあります。投稿されたコードはコンパイルされません。関数プロトタイプがありません。また、 '#include 文などがありません。 – user3629249

答えて

2

、お使いのシステム上、stdoutはフラッシュされません。改行が読み込まれる前にファイルの終わりがstdinに達した場合、あなたの関数clrKyb()が無限ループを実行します

void pause(void) { 
    //Pause the program as until the user presses enter 
    printf("Press <ENTER> to continue..."); 
    fflush(stdout); 
    clrKyb(); 
} 

注:あなたはfflush()を呼び出してそれを強制することができます。

void clrKyb(void) { 
    int c; 
    while ((c = getchar()) != EOF && c != '\n') 
     continue; 
} 
関連する問題