如何在visual studio调试控制台中生成EOF(或ASCII 0)?

时间:2012-01-19 20:08:40

标签: visual-studio eof getchar

我在Windows上运行了一个控制台模式程序。程序在循环单元中调用getchar(),返回EOF0。我想在运行调试器时输入以下其中一个作为测试向量:

abc\0”或“abc\EOF

我似乎无法始终如一地产生。我通过键入 a b c CTRL-Z ENTER <尝试了in this question建议/ kbd>“。这会将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?

3 个答案:

答案 0 :(得分:1)

试试这个:

<Enter><Ctrl-Z><Enter>.

答案 1 :(得分:0)

@Hans Passant解决方案对我有用 - 也适用于OP。
  1要生成ASCII 0,请键入(Ctrl + @)或(Ctrl + 2)
  2要生成EOF,请键入(Ctrl + Z Enter),但输入缓冲区必须为空。所以这通常是在之后的(回车),因此(输入Ctrl + Z回车)。

但OP代码存在问题。

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

在OP代码中,如果出现字符ASCII 255,则会将其分配给与{EOF相比较的char( - 1)。而是使用int ch

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

这可以防止代码在EOF发生后永远循环或犯错。


输入ASCII 255
(Alt键向下,num pad 2,num pad 5,num pad 5,Alt key up)

答案 2 :(得分:0)

在计算中,EOF是计算机操作系统中的条件,无法从数据源读取更多数据。一般来说,从终端阅读永远不会产生EOF。 相反,程序认识到源是终端(或其他“字符设备”)并将给定的保留字符或序列解释为文件结束指示符;

most commonly this is an ASCII Control-Z, or Control-D