2

Windows でコンソール モード プログラムを実行しています。プログラムはgetchar()ループ単位で anEOFまたは a のいずれかを呼び出します0。デバッガーの実行中に、次のいずれかをテスト ベクターとして入力したいと思います。

" abc\0" または "abc\EOF

どちらも一貫して生成できないようです。「」と入力して、この質問の提案を試しましたa bcCTRL-ZENTER。これにより、プログラムに戻り、次の呼び出し 97,98,99,26でハングします。getchar()

入力CTRL-Dしても hlep は実行されずgetchar、制御文字に対して 4 が返され、次に改行文字が返され、コンソールに入力したばかりの行が複製されます。VSが制御文字を編集文字として使用しているようです。

編集:
これは、私が使用しているコードの簡略化されたバージョンです。デバッグ コンソールとコマンド ウィンドウで同じ動作が見られます。

#define MAXSZ 4096
int main(int argc, char **argv)
{
   short int data[MAXSZ]={0}, i=0; 
   char c;
   do {
      if (i==MAXSZ) break;
      c = getchar();
      if (c!=EOF) data[i]=c;
   } while (data[i++]!=0);
   for (i=0;data[i]&&i<MAXSZ;i++)
      putchar(data[i]);
}

Windows コンソールをデバッグする Visual Studioで EOF または ASCII 0 を入力するにはどうすればよいですか?

4

2 に答える 2

1

これを試してください:

<Enter><Ctrl-Z><Enter>.
于 2012-01-19T20:16:18.413 に答える
0

@Hans Passantソリューションは私にとってはうまくいきます-OPでもうまくいくはずです。
1 ASCII 0 を生成するには、(Ctrl+@ ) または (Ctrl+2 )
を入力します。 2 EOF を生成するには、(Ctrl+Z Enter) を入力しますが、入力バッファーは空である必要があります。したがって、これは通常、(Enter) の後にあるため、(Enter Ctrl+Z Enter) になります。

しかし、OP コードには問題があります。

char c; // should be int ch
do {
   ...
   c = getchar();
   if (c!=EOF) data[i]=c;
} while (...);

OP コードでは、文字 ASCII 255 が発生するcharと、EOF と比較して (-1) に割り当てられます。代わりに を使用しますint ch

   if (c!=EOF) data[i]=c;
   // should be
   if (c==EOF) break;
   data[i]=c;

これにより、コードが永遠にループしたり、EOF が発生したときにエラーが発生したりするのを防ぎます。


ASCII 255 を入力するには
(Alt キーを押す、テンキー 2、テンキー 5、テンキー 5、Alt キーを押す)

于 2013-09-10T19:07:55.107 に答える