0
char keyin, buffer[1024]; 
do 
{ 
 keyin=gets(buffer);
} 
while (keyin != "\n");

ユーザーが Enter キーを押して一時停止状態を終了する一時停止関数を C で記述しようとしています。ユーザーが「一時停止」と書き込むと、この関数が実行されます。私はしばらくの間この機能に取り組んできましたが、私にはわかりません。いくつかの異なる方法でコードを実装しましたが、どれも機能しません。「\n」とキーインの比較が原因だと思います。「\n」は直接エンターキーに変換されないと思います。

4

2 に答える 2

2

whileEnter キーが 1 回押されるのを待つためのループは必要ありません。Enterキーを押すまで待機します(任意のキーを押すことができます) : http://en.cppreference.com/w/c/io/gets

しかし、多くのスペースを確保する必要があります。誰かが「何かが起こるまで」他のキーを押し続けたらどうなるでしょうか? バッファーがオーバーフローし、プログラムが (ほとんどの場合) クラッシュします。

あなたはおそらくgetcharを使いたいでしょう- これは一度に1 つのキープレスを送り返します。

注: 通常、Enter キーは ASCII コード 10 (0x0A) ではなく 13 (0x0D) を送信します。代わりに '\r' を使用するか ('character' と "string" に関する他のユーザーのメモに注意してください!)、すべての混乱を避けて 16 進数または 10 進数の値を使用できます。

これは、出力時に慣れている '\n' の動作とは異なります。これは、特定の関数のみが、テキスト内のコード '\n' を OS に必要な行末シーケンスに展開または変換するためです。

于 2013-10-05T02:17:24.217 に答える
1

==文字列を C で、またはCで比較することはできません。文字列!=の内容を次のような関数strcmp(または、できればより安全なバリアントの 1 つ) と比較する必要があります。たとえば、次のようになります。

while (strcmp(keyin, "\n") != 0);

余談ですが、実際には決して使用しないでくださいgets。安心・安全にご利用いただくことはできません。

于 2013-10-05T01:47:45.207 に答える