0

ライブラリを含めました<stdio.h>が、以下のコードは VS 2015 (および GNU GCC) で無限ループにつながります。

//Sample Code
void main() {
char check;
do {
    check = '\0';
    printf("Enter a character > ");
    fflush(stdin);
    scanf("%c", &check);
    if (check == '\n') printf("\nERROR\n");
} while (check != '\n');
system("pause"); }

/*
Result:
Enter a character > r
Enter a character >
ERROR
Enter a character > ww
Enter a character > Enter a character >
ERROR
*/

しかし、以前のバージョンの VS (2013 年) でコンパイルすると、まったく問題なく動作しました。fflushそのため、VS 2015 ではこの機能が機能しなくなったのではないかと疑っています。

申し訳ありませんが、私はC言語が初めてです。したがって、私が学んだことによると、使用fflush(stdin)は実際には悪い考えであり、この関数は未定義の動作としてマークされています。

しかし、ここに私が興味をそそられている本当の質問があります:

  1. fflush(stdin)VS2015 で動作しなくなったのはなぜですか?

  2. fflush(stdin)コードに含まれる do-while ループで使用できる「関数」を実装する方法は他にありますか (無限ループを防ぐため)。

ありがとうございました

4

0 に答える 0