2

残念なことに、大学の課題で vc++ 6 の conio.h を使用していました。

私の問題は、グラフィック設定が画面の中央にあることです...

例えば

gotoxy( getcols()/2, getrows()/2);
printf("Enter something");
scanf( "%d", &something );  

誰かが「何か」を入力する前に誤ってエンターを押した場合、カーソルは次の行の画面の左側にリセットされます。

Iv は、fflush(stdin) と getchar() を使用してキーボードと BIOS バッファーをフラッシュしようとしましたが、予想どおり機能しませんでした。

ヘルプ/アイデアをいただければ幸いです, ありがとう, V

4

2 に答える 2

3

ユーザーの入力を一度に 1 文字ずつ読み取ってみてください。先頭のキャリッジ リターンが検出された場合は、その文字を無視してgotoxy( getcols()/2, (getrows()/2)+1)コードを再度実行し、カーソルを適切な位置に再配置します (以前に出力されたメッセージを上書きしないように 1 行追加します)。

于 2010-03-15T20:56:16.473 に答える
2

conio.h成功への道には、課題で求められていることを実行することが含まれます:) 特に、入力を読み取るためにから 1 つ以上の関数を使用する必要があります。conio.h 関数scanf()ではありません。

私は怠け者なので、これは宿題の質問です。コードは書きません。

1 つの可能性は、cscanf()ではなくを使用することですscanf()。しかし、これ(私にはわかりません)入力文字をエコーする可能性があり、これにはその偶発的な が含まれEnter、問題は解決しません。

この場合、私の戦略は、非エコーgetch()機能を使用して、キーボードから入力された文字を収集するループを作成することです。少なくとも1つの印刷可能な文字が得られるまで改行を無視し、改行を取得するまで文字を受け入れる(そして文字配列などに保存する)ことができます。入力文字がエコーされないので、カーソルが動かないと思います。

その後、 を使用して入力バッファから入力文字をスキャンできますsscanf()。ユーザーがバッファをオーバーフローしないように、入力文字をカウントする必要があります。また、おそらく不良データの場合のエラー処理。

編集:私が言及するのを忘れていたもの:バッファ内の最後の入力文字の後にゼロ文字('\0')が続く必要があるため、sscanf()適切に終了します。デフォルトでバッファーがゼロでいっぱいになる可能性がありますが、意図的にゼロを入れると (たとえば、最後の改行を打つとき)、コードがより正確で堅牢になります。

于 2010-03-15T21:01:02.633 に答える