Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C K&;R代码在VS2012中不工作_C_Visual Studio 2012 - Fatal编程技术网

C K&;R代码在VS2012中不工作

C K&;R代码在VS2012中不工作,c,visual-studio-2012,C,Visual Studio 2012,这是来自K&R的,它应该计算数字、空白等。我编译得很好,但当我运行时,我只得到一个空白屏幕,我所能做的就是键入输入。这是不是因为C语言已经过时而无法工作 #include <stdio.h> main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) !=

这是来自K&R的,它应该计算数字、空白等。我编译得很好,但当我运行时,我只得到一个空白屏幕,我所能做的就是键入输入。这是不是因为C语言已经过时而无法工作

#include <stdio.h>

main()
{
int c, i, nwhite, nother;
int ndigit[10];

nwhite = nother = 0;
for (i = 0; i < 10; ++i)
    ndigit[i] = 0;

while ((c = getchar()) != EOF)
    if (c >= '0' && c <= '9')
        ++ndigit[c-'0'];
    else if (c == ' ' || c == '\n' || c == '\t')
        ++nwhite;
    else
        ++nother;

printf("digits =");
for (i = 0; i < 10; ++i)
    printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n", nwhite, nother);
}
#包括
main()
{
int c,i,nwhite,other;
int-ndigit[10];
nwhite=nother=0;
对于(i=0;i<10;++i)
ndigit[i]=0;
而((c=getchar())!=EOF)

简单地说,如果(c>='0'&&c,这个循环将在键入ctrl+d后结束。如果希望在按enter键时结束,只需稍微修改一下:change

while ((c = getchar()) != EOF)


简单地说,这个循环将在您键入ctrl+d后结束。如果您希望在按enter键时结束,只需稍微修改一下:change

while ((c = getchar()) != EOF)


编写该程序的目的是获取输入,直到文件结束字符。由于您使用的是DOS,请输入Ctrl+Z以终止输入(您必须在Ctrl+Z之后单击“enter”,因为键盘输入将被行缓冲)


编辑时:在Windows/DOS环境中,Ctrl+Z是文件结尾(EOF)字符。在UNIX/Linux环境中,它(通常)是Ctrl+D。

编写程序是为了获取输入,直到文件结尾字符。由于您使用的是DOS,请输入Ctrl+Z终止输入(必须按“回车”键)在Ctrl+Z之后,因为键盘输入将被行缓冲)


编辑时:在Windows/DOS环境中,Ctrl+Z是文件结尾(EOF)字符。在UNIX/Linux环境中,它(通常)是Ctrl+D。

定义“不工作”,在什么意义上说“不工作”?它会崩溃吗?通过发送EOF(Ctrl+Z)实际上会中断while循环吗?它是否给出错误的输出?描述!除非您发送一个
EOF
char,否则程序不会告诉您任何事情。您这样做了吗?不工作意味着我运行程序并得到一个空白的DOS屏幕。如果我键入某个内容,它将留在那里,让我键入更多内容。定义“不工作”为“不工作”在什么意义上?它崩溃了吗?你真的通过发送EOF(Ctrl+Z)来打破while循环吗?它是否给出错误的输出?描述!在你发送一个
EOF
char之前,程序不会告诉你任何事情。你这样做了吗?不工作意味着我运行程序,得到一个空白的DOS屏幕。如果我键入某个内容,它会留在那里,让我键入更多内容。谢谢,这很有效。我不知道我必须键入输入,然后键入Ctrl+Z。他没有使用g DOS.@devantian:OP的评论“不工作意味着我运行程序并得到一个空白的DOS屏幕”,这让我相信他是(或者至少是一个Windows命令提示符)。控制台服务器conhost.exe并不是特例Ctrl+Z(即0x1A),与例如Ctrl+C不同。它在答复
SrvReadConsole
LPC请求之前等待enter键,就像任何其他熟读一样。Ctrl+Z处理由客户端进程决定,除了
ReadFile
(而不是
ReadConsole
)当控制台输入以0x1A开始时,返回读取的0字节。否则,Ctrl+Z由C运行时处理(如果使用),甚至POSIX层(例如,
\u read
)有一个文本模式,它将Ctrl+Z视为
EOF
。谢谢,这是有效的。我不知道我必须键入输入并在输入后键入Ctrl+Z。他没有使用DOS。@devantian:OP的评论“不工作意味着我运行程序并得到一个空白的DOS屏幕”,这让我相信他是(或者至少是Windows命令提示符)。控制台服务器conhost.exe与例如Ctrl+C不同,它不使用特殊情况下的Ctrl+Z(即0x1A)。它在响应
SrvReadConsole
LPC请求之前等待enter键,就像任何其他熟读一样。Ctrl+Z处理由客户端进程决定,除了
ReadFile
(但不是
ReadConsole
)当控制台输入以0x1A开始时,返回读取的0字节。否则,Ctrl+Z由C运行时处理(如果使用),甚至POSIX层(例如,
\u read
)都有一个文本模式,将Ctrl+Z视为
EOF