C程序不读取输入,不给出输出

C程序不读取输入,不给出输出,c,input,C,Input,我对C完全陌生,C编程语言书中有这样一个例子: #include <stdio.h> #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */ /* count line and words and characters in input */ main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0;

我对C完全陌生,C编程语言书中有这样一个例子:

#include <stdio.h>

#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */

/* count line and words and characters in input */

main()
{
    int c, nl, nw, nc, state;

    state = OUT;
    nl = nw = nc = 0;
    while ((c = getchar()) != EOF)  {
            ++nc;
            if (c == '\n')
                    ++nl;
            if ( c == ' ' || c == '\n' || c == '\t')
                    state = OUT;
            else if ( state == OUT) {
                    state = IN;
                    ++nw;
            }
    }
    printf("%d %d %d\n", nl, nw, nc);
}
代码在终端中编译良好:gcc-o count.c 当我用:./count运行它时,让我测试它,给我一个新行来输入。我输入,点击回车键,它会给我另一个空白行,我的文本输入,而不是输出任何东西。 我做错了什么?我用输入做了一些其他的例子,我收到了一个输出,但是我从这本书中使用的代码现在都不适合我。
非常感谢。

值EOF不等于换行符,即“\n”。EOF是当您按下ctrl+d键时,当标准输入(也称为getchar)来自键盘时,或者当您到达一个文件时,如果您正在从一个文件重定向标准输入(您将使用该文件)。/count值EOF不等于换行符(也称为“\n”)。EOF是当您点击ctrl+d时,当标准输入(也称为getchar)来自键盘时,或者当您到达一个文件时,如果您正在从一个文件重定向标准输入,您将使用该文件进行操作时发送的值。/count点击ctrl-d,这是Linux的EOF字符,假设您正在使用它。

点击ctrl-d,这是Linux的EOF字符,假设您正在使用它。

代码中的循环表示迭代,直到读取EOF文件结尾字符。如果您使用的是Linux,这将是Ctrl+D。对于Windows,您必须按Ctrl+Z并输入键。

代码中的循环表示要迭代,直到读取EOF文件结尾字符。如果您使用的是Linux,这将是Ctrl+D。对于Windows,您必须按Ctrl+Z并按enter键。

如果程序的预期结果是计算输入中的行数、字数和字符数,则必须明确指定输入的开始位置和结束位置

在这个特定的程序中,当while循环开始并且输入字符不是EOF时,输入开始,当输入EOF字符时,输入停止

EOF的含义和用法必须明确

EOF是流函数返回的宏,用于指示文件结束条件。此符号在stdio.h中声明

当对表格进行比较时:

c=getchar!=EOF

内部发生的是,将“c”中输入的字符的ASCII值与EOF的ASCII值进行比较

输入输入后,点击“返回”Return'对应于换行的新行,其ASCII值为10位小数。 ASCII中的EOF对应于传输结束,ASCII值为4位小数

因此,如果在输入之后继续点击“Return”,程序将期望输入无穷大。要指示输入结束,必须输入EOF。EOF对应于Ctrl-D ASCII值4


总而言之,你的程序没有问题。你所要做的就是在输入的末尾,而不是点击“返回”,做一个control-D。

如果程序的预期结果是计算输入中的行数、字数和字符数,那么重要的是,应该清楚地划分给定输入的开始位置和结束位置

在这个特定的程序中,当while循环开始并且输入字符不是EOF时,输入开始,当输入EOF字符时,输入停止

EOF的含义和用法必须明确

EOF是流函数返回的宏,用于指示文件结束条件。此符号在stdio.h中声明

当对表格进行比较时:

c=getchar!=EOF

内部发生的是,将“c”中输入的字符的ASCII值与EOF的ASCII值进行比较

输入输入后,点击“返回”Return'对应于换行的新行,其ASCII值为10位小数。 ASCII中的EOF对应于传输结束,ASCII值为4位小数

因此,如果在输入之后继续点击“Return”,程序将期望输入无穷大。要指示输入结束,必须输入EOF。EOF对应于Ctrl-D ASCII值4

总而言之,你的程序没有问题。你所要做的就是在输入的末尾,而不是点击“返回”,做一个control-D。

Hm,我喜欢K&R。 以前有过这个问题,需要一个结局。 按Ctrl+d组合键,您可以尝试: 嗯,我喜欢K&R。 以前有过这个问题,需要一个结局。 按Ctrl+d组合键,您可以尝试:
ls |./count

尝试按列表末尾的CTRL-D键。或者,通过管道将文本文件传输到它,而不是控制台输入。尝试按列表末尾的CTRL-D。或者,通过管道将文本文件传输到它,而不是控制台输入。+1;OP的进一步澄清:该程序的设计目的是在输入完全停止之前不提供任何输出,这可以如上所述。如果您想要运行总计,请移动printf。。。
; 里面的while…{…}+1.OP的进一步澄清:该程序的设计目的是在输入完全停止之前不提供任何输出,这可以如上所述。如果要运行总计,请移动printf。。。;里面的while…{…};