1

そのため、ユーザーに私のプログラムを繰り返したいかどうか尋ねようとしていますが、時々奇妙な結果が得られます。毎回発生するわけではなく、何が原因なのかわかりません。

「q」の代わりにrepeatProgramに「q」を入力した後、「return」を割り当てているように見えますが、その理由はわかりません。

動作時の出力:

終了するには q を入力し、続行するには y を入力します。入力しました。これは有効なオプションではありません

失敗したときの出力:

終了するには q を入力し、続行するには y を入力します。
q
を入力しました
。これは有効なオプションではありません。

コード:

char RepeatProgramPrompt()
{
    char repeatProgram;

    do
    {
        printf("\nTo exit enter q, to continue enter y.\n");
        scanf("%c%*c", &repeatProgram);

        repeatProgram = tolower(repeatProgram);

        if(repeatProgram != 'y' && repeatProgram != 'q')
        {
            printf("\nYou've entered %c, that isn't a valid option.\n", repeatProgram);

        }

    }while(repeatProgram != 'y' && repeatProgram != 'q');


    return(repeatProgram);
}

だから私の質問は、なぜこれが起こっているのですか? 何度か試行しても問題なく動作し、失敗するだけです。

初めての投稿なのでフォーマットが間違っていたらごめんなさい。

4

2 に答える 2

0

scanf の後に改行で末尾の空白文字を食べ尽くすと、動作するはずです。

scanf("%c", &repeatProgram);
while(getchar() != '\n')
{
    //do nothing
}

サンプル出力

于 2013-10-28T06:40:10.240 に答える
0

この問題は、最初の入力後に をscanf読み取るために発生します。\nこれを回避するには、scanfステートメントを次のように変更します。

scanf("%c", &repeatProgram);
getchar(); // this will remove the excess '\n'

出力:

Sukhvir@Sukhvir-PC ~
$ ./test

To exit enter q, to continue enter y.
d

You've entered d, that isn't a valid option.

To exit enter q, to continue enter y.
s

You've entered s, that isn't a valid option.

To exit enter q, to continue enter y.
d

You've entered d, that isn't a valid option.

To exit enter q, to continue enter y.
q

Sukhvir@Sukhvir-PC ~
$
于 2013-10-28T07:24:39.643 に答える