我在Windows上运行了一个控制台模式程序。程序在循环单元中调用getchar()
,返回EOF
或0
。我想在运行调试器时输入以下其中一个作为测试向量:
“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?
答案 0 :(得分:1)
试试这个:
<Enter><Ctrl-Z><Enter>.
答案 1 :(得分:0)
但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