c语言输出中的行计数

c语言输出中的行计数,c,C,我在练习数行程序。我有点困惑,我应该如何为这个程序提供输入。我尝试键入随机句子,包括程序中的新行元素“\n”。但无论我给出什么输出,输出仍然是空的,并要求我继续键入。我上网已经有一段时间了,我不知道我在哪里失败了。你能帮帮我吗。我打算跳过这节课,然后再回来。但教科书后面的课程取决于这个主题。谢谢 #include <stdio.h> /* count lines in input */ main() { int c, nl; nl = 0; while ((c

我在练习数行程序。我有点困惑,我应该如何为这个程序提供输入。我尝试键入随机句子,包括程序中的新行元素“\n”。但无论我给出什么输出,输出仍然是空的,并要求我继续键入。我上网已经有一段时间了,我不知道我在哪里失败了。你能帮帮我吗。我打算跳过这节课,然后再回来。但教科书后面的课程取决于这个主题。谢谢

#include <stdio.h>
/* count lines in input */
main()
{
    int c, nl;
    nl = 0;
    while ((c = getchar()) != EOF)
        if (c == '\n')
            ++nl;
        printf("%d\n", nl);
    }
#包括
/*计算输入中的行数*/
main()
{
INTC,nl;
nl=0;
而((c=getchar())!=EOF)
如果(c=='\n')
++nl;
printf(“%d\n”,nl);
}

因此,输出仍然是空的,因为程序在循环时卡在
上,因为它下面的代码不在花括号(
{}
)之间,因此,程序会无限期地请求输入字符,而没有输出

另外,我对您的代码有点困惑,因为我不知道如何通过
stdin
而不使用文件重定向来访问
EOF
。通过搜索堆栈溢出,我发现您需要在基于UNIX的系统上键入Ctrl+D,或者在Windows上键入Ctrl+Z,以便通过控制台键入来使用EOF。 ()

顺便说一下,我已经修改了您的代码,我只是不知道这是否正是您想要做的:

#include <stdio.h>
/* count lines in input */
main()
{
    int c, nl;
    nl = 0;
    while ((c = getchar()) != EOF)//EOF can be reached by stdin when pressing Ctrl+D
    {
        if (c == '\n')
        {
            ++nl;
        }
        
    }
    printf("Number of lines: %d\n", nl);
}
#包括
/*计算输入中的行数*/
main()
{
INTC,nl;
nl=0;
而((c=getchar())!=EOF)//按Ctrl+D时,stdin可以达到EOF
{
如果(c=='\n')
{
++nl;
}
}
printf(“行数:%d\n”,nl);
}

好的编码

只需将文件重定向到您的程序,例如,.g
/your_prog
。这将重定向
您的_文件
,作为
stdin
上的程序输入。(适用于Linux、Windows或Mac)使用键盘时,键入一些内容(如果需要,包括换行符),然后在Windows或Un*x.@DavidC.Rankin的末尾键入
。@DavidC.Rankin嘿,我有点困惑。我是否需要为此程序提供外部文本文件?我以为这是在问用户输入否,你可以用两种方法。关键是您必须向
getchar()
指示
输入结束(
EOF
),以便退出循环。否则,
getchar()
只是坐在那里阻塞——等待下一个输入。当您到达终点时,重定向文件会自动生成一个
EOF
。当使用键盘工作时,您必须生成@pmg描述的手动
EOF
。(您也可以在bash…@DavidC.Rankin中使用一个herdeoc或herestring,现在就有意义了。感谢David为您提供宝贵的时间和解释。这种支持总是让我有动力学习新东西是的,这很好。我不知道CTRL+D可以生成EOF