質問: " puts("入力"); if ((*fgets(sk,sizeof(sk),stdin) < 0x21) || strlen(sk) >= 21 ) { puts("error"); goto start1; } だと,20字以上のときにstdinのバッファに残ってしまってエラー表示が2度出ます。 ちなみにfflush(stdin)は使用できないansi c規格です。 よろしくお願いします。
回答: #include main() { char sk[21] ; int i ; i = -1 ; puts("入力"); do { i ++ ; if ( i > 21 ){ puts("\nerror\n入力"); i = 0 ; } sk[i] = getch(); printf("%c",sk[i]); } while ( sk[i] != 0x0d ); } これだと21文字目を入れた時点でerrorを表示します。 enterを押した時点でerrorを表示して再入力させるのであれば、 #include main() { char sk[21],c ; int i ; i = -1 ; puts("入力"); do { i ++ ; if ( i < 21 ){ c = sk[i] = getch(); } else if ( c == 0x0d ){ puts("\nerror\n入力"); i = 0 ; c = sk[0] = getch(); } else { c = getch(); } printf("%c",c); } while ( !( c == 0x0d && i < 21 ) ); } でいかがでしょうか。