C 我正在尝试创建一个在输入后计算行数的程序\n。我做错了什么?

C 我正在尝试创建一个在输入后计算行数的程序\n。我做错了什么?,c,C,我正在通过Kernighan&Ritchie的书学习C编程,并对他们的代码进行了一些修改,以创建我自己的程序。只有我在输入一个字符后得到三行输出。前两行表示行数为0,然后表示行数为1。很明显,我宁愿让输入直接进入一个。我做错了什么 int main() { int stor, lines; lines = 0; while((stor = getchar()) != EOF){ if(stor == '\n') ++lines;;

我正在通过Kernighan&Ritchie的书学习C编程,并对他们的代码进行了一些修改,以创建我自己的程序。只有我在输入一个字符后得到三行输出。前两行表示行数为0,然后表示行数为1。很明显,我宁愿让输入直接进入一个。我做错了什么

int main()
{
    int stor, lines;
    lines = 0;
    while((stor = getchar()) != EOF){
        if(stor == '\n')
            ++lines;;
         printf("Amount of lines:%d\n", lines);
}
return 0;

您可以打印出
while
循环内部的行数,该循环为您输入的每个字符运行。因此,对于您按下的每个键,都会得到一行输出

printf
移动到
while
循环体之后,它将在循环结束时只打印一次

#include <stdio.h>

int main()
{
    int stor, lines;
    lines = 0;
    while((stor = getchar()) != EOF) {
       if(stor == '\n')
            ++lines;
    }
    printf("Amount of lines:%d\n", lines);
    return 0;
}
#包括
int main()
{
int-stor,行;
直线=0;
而((stor=getchar())!=EOF){
如果(stor=='\n')
++线条;
}
printf(“行数:%d\n”,行数);
返回0;
}

您可以打印出
while
循环内部的行数,该循环针对您输入的每个字符运行。因此,对于您按下的每个键,都会得到一行输出

printf
移动到
while
循环体之后,它将在循环结束时只打印一次

#include <stdio.h>

int main()
{
    int stor, lines;
    lines = 0;
    while((stor = getchar()) != EOF) {
       if(stor == '\n')
            ++lines;
    }
    printf("Amount of lines:%d\n", lines);
    return 0;
}
#包括
int main()
{
int-stor,行;
直线=0;
而((stor=getchar())!=EOF){
如果(stor=='\n')
++线条;
}
printf(“行数:%d\n”,行数);
返回0;
}

这里您试图计算输入中新行字符的总数
\n

为此,只有在处理完输入后,才需要打印
\n
的总数。因此,您需要将
printf
移动到while循环之外

int main()
{
    int stor, lines;
    lines = 0;
    while((stor = getchar()) != EOF) {
    if(stor == '\n')
        ++lines;

    /* Move the below printf outside the while loop */
    /* printf("Amount of lines:%d\n", lines); */
    }

    printf("Amount of lines:%d\n", lines);
    return 0;
}

在这里,您试图计算输入中新行字符的总数
\n

为此,只有在处理完输入后,才需要打印
\n
的总数。因此,您需要将
printf
移动到while循环之外

int main()
{
    int stor, lines;
    lines = 0;
    while((stor = getchar()) != EOF) {
    if(stor == '\n')
        ++lines;

    /* Move the below printf outside the while loop */
    /* printf("Amount of lines:%d\n", lines); */
    }

    printf("Amount of lines:%d\n", lines);
    return 0;
}

你有什么意见?但无论如何,您可以通过打印出接收到的lat字符的ASCII码来轻松调试程序。类似于
printf(“行数:%d,最后一个字符=%x\n”,行数,stor)您的输入是什么?但无论如何,您可以通过打印出接收到的lat字符的ASCII码来轻松调试程序。类似于
printf(“行数:%d,最后一个字符=%x\n”,行数,stor)好的,这完全回答了我的问题,谢谢。然后我必须按下EOF键才能得到我假设的语句,因为while循环终止了?是的,while循环终止需要EOF。在unix类型的系统中,可以通过
Ctrl+D
传递EOF,在windows中,可以通过
Ctrl+Z
传递EOF。但是,如果您正在重定向文件中的输入,则无需执行任何操作,EOF将自动读取到文件末尾。好的,这完全回答了我的问题,谢谢。然后我必须按下EOF键才能得到我假设的语句,因为while循环终止了?是的,while循环终止需要EOF。在unix类型的系统中,可以通过
Ctrl+D
传递EOF,在windows中,可以通过
Ctrl+Z
传递EOF。但是,如果您正在重定向来自文件的输入,则无需执行任何操作,EOF将在文件末尾自动读取。