2

我有一个在 Windows 上运行的控制台模式程序。程序getchar()在循环中调用 anEOF或 a0返回。我想在运行调试器时输入以下内容之一作为测试向量:

abc\0”或“abc\EOF

我似乎也无法始终如一地生成。我通过键入“尝试了这个问题中a bcCTRL-ZENTER的建议。这将返回97,98,99,26到我的程序,然后在下一次getchar()调用时挂起。

输入CTRL-D也无济于事,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]);
}

如何在Visual Studio 调试Windows 控制台中输入 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 回答