C程序不读取输入,不给出输出
我对C完全陌生,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;
#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
总而言之,你的程序没有问题。你所要做的就是在输入的末尾,而不是点击“返回”,做一个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…{…};