[英]C program doesn't read an input, doesn't give an output
我是C语言的新手,并从The C Programming Language一书中获得了以下示例:
#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 count.c当我使用./count运行它时,让我对其进行测试,并在输入中输入新行。 我输入内容,点击Return键,它为我的文本输入提供了另一个空白行,但不输出任何内容。 我做错了什么? 我正在用输入来做其他一些示例,但是正在接收输出,但是本书中使用的所有代码现在都不适用于我。 非常感谢。
值“ EOF”不等于换行符“ \\ n”。 “ EOF”是当您按ctrl + d,标准输入(aka getchar())来自键盘或到达文件(如果您要从文件重定向标准输入)时发送的值。使用./count <文件)。
假设您正在使用Ctrl-D,这是Linux的EOF字符。
代码中的循环表示要进行迭代,直到读取EOF(文件结束)字符为止。 如果使用Linux,则为Ctrl + D。 对于Windows,必须按Ctrl + Z并输入键。
如果程序的预期结果是计算输入中的行数,单词和字符数,则重要的是应明确划定给定输入的起点和终点。
在此特定程序中,输入在while循环开始时开始(并且输入字符不是EOF),输入在输入EOF字符时停止。
EOF的含义和用法必须清楚。
EOF是由流函数返回以指示文件结束条件的宏。 此符号在stdio.h中声明。
比较形式时:
((c = getchar())!= EOF)
完成后,内部发生的是将“ c”中输入的字符的ASCII值与EOF的ASCII值进行比较。
输入输入后,单击“返回”。 “返回”对应于换行换行符,其ASCII值为10(十进制)。 ASCII中的EOF对应于传输结束,并且具有ASCII值4(十进制)。
因此,如果您在输入后一直按“ Return”,则程序将无限期期待输入。 为了指示输入结束,必须输入EOF。 EOF对应于Ctrl-D(ASCII值4)。
综上所述,您的程序没有任何问题。 您所要做的就是在输入的末尾,而不是按“ Return”,而是执行Control-D。
嗯,我爱K&R。 之前有这个问题,需要结尾。 作为Ctrl + d,您可以尝试: 。/计数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.