2016-10-03 13 views
1
char theInput[10]; 
long option; 
int innerLoop = 1; 
char *dunno; 
while(innerLoop == 1){ 
    printf("\nType '1' to get your change, '2' to select another item, or '3' to add more funds: "); 
    fgets(theInput, sizeof theInput, stdin); 
    option = strtol(theInput, &dunno, 10); 
    if(option == 1){ 
    loop = 0; 
    innerLoop = 0; 
    }else if(option == 2){ 
    loop = 1; 
    outerLoop = 1; 
    innerLoop = 0; 
    firstLoop = 0; 
    }else if(option == 3){ 
    loop = 1; 
    innerLoop = 0; 
    outerLoop = 1; 
    firstLoop = 1; 
    }else{ 
    printf("\nInvalid input, please try again.\n"); 
    innerLoop = 1; 
    } 
} 

このコードの結果は、最初に実行されたときに "Type '1'を出力し、改行の後に「入力が無効です。もう一度やり直してください。コマンドラインから何も入力せずに。次に、最初のprintf文を再度出力し、入力を受け入れ、動作します。最初の文を出力してから入力を待つことを意味します。whileループでは、fgets()は改行を入力として受け取ります。

以下は端末出力です。

「タイプ 『1』、あなたの変更を取得するには 『2』以上の資金を追加するには別の項目、または 『3』を選択する:。 無効な入力を、もう一度試してください

タイプを 『1』を得るためにあなたの他のアイテムを選択するには '2'を、さらに資金を追加するには '3'を入力してください: "

+3

あなたが投稿したコードでは、あなたが言及したものは印刷されません(たとえば、「変更するには「タイプ 'C」の部分)。エラーが投稿していないコードの部分にある可能性があります。 – nos

+0

ご回答ありがとうございます。投稿時にコードを更新するのは間違いです。C、N、Aから1,2,3に変更しました。なぜなら、整数の処理が容易であると思ったからです。私はコンピュータ上で現在実行されているので、すべてが更新されています。 – Vorkos

+2

以前のunpostedコードでは、 'stdin'に' '\ n''を残した入力関数を使用していました。 – chux

答えて

0

stdoutをフラッシュできますか?あなたのソースコードを適応する前に

#include <stdio.h> 

int main() { 
    int loop = 0; 
    int outerLoop = 0; 
    int firstLoop = 0; 

    char theInput[10]; 
    long option; 
    int innerLoop = 1; 
    char *dunno; 
    while(innerLoop == 1){ 
    printf("\nType '1' to get your change, '2' to select another item, or '3' to add more funds: "); 
    fflush(stdout); 
    fgets(theInput, sizeof theInput, stdin); 
    option = strtol(theInput, &dunno, 10); 
    if(option == 1) { 
     loop = 0; 
     innerLoop = 0; 
    }else if(option == 2){ 
     loop = 1; 
     outerLoop = 1; 
     innerLoop = 0; 
     firstLoop = 0; 
    }else if(option == 3){ 
     loop = 1; 
     innerLoop = 0; 
     outerLoop = 1; 
     firstLoop = 1; 
    }else{ 
     printf("\nInvalid input, please try again.\n"); 
     innerLoop = 1; 
    } 
    } 
} 

あなたはisoltionでこの例を実行してみてくださいすることができ、あなたが持っているかどうかを確認するために、:他の人が作業例を持っているしたい場合

私はmainメソッドを追加しまし」予想された結果?

関連する問題