繁体   English   中英

C程序不读取输入,不提供输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM