【发布时间】:2012-01-19 20:08:39
【问题描述】:
我有一个在 Windows 上运行的控制台模式程序。程序在循环单元中调用getchar(),返回EOF 或0。我想在运行调试器时输入以下内容之一作为测试向量:
“abc\0”或“abc\EOF”
我似乎也无法始终如一地生成。我通过键入 a bcCTRL-ZENTER尝试了建议 in this question >"。这会将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?
【问题讨论】:
-
可以通过输入 Ctrl+@(按住 Ctrl,按 2 键)输入二进制零,在屏幕上回显为 ^@。由于 getchar() 使用缓冲,因此您必须按下 Enter 键。或使用
<conio.h>中的_getch() 输入无缓冲文本。 -
这就是我最终用于测试的解决方案。我仍然想知道是否可以可靠地生成在 Enter 键之前处理的 EOF。
标签: visual-studio eof getchar