c语言中enter键的作用

请问c语言中什么情况下按下回车键enter后程序就停止执行了,什么情况下按下回车键enter后还能继续输入?
下面附上使我困惑的代码:一般来说在键盘上输入enter之后控制台不就开始给我们反馈信息了吗?
但是在这个程序中输入enter起到的是一个换行的作用:
此程序是C primer plus第六版第167页上的,目的是:
编写一个统计单词数量的程序,还可以计算字符数和行数。

}

#include<stdio.h>
#include<stdbool.h>//为bool、true、false提供定义
#include<ctype.h>为isspace()函数提供原型
#define STOP '|'
int main(){
    char c;//读入字符
    char prev;//读入的前一个字符
    long n_chars=0L;//字符数
    int n_lines=0;//行数
    int n_words=0;//单词数
    int p_lines=0;//不完整的行数
    bool inword=false;//如果c在单词中,inword等于true
    
    printf("Enter text to be amalyzed(|to terminate):\n");
    prev='\n';//用于识别完整的行
    while((c=getchar())!=STOP){
        n_chars++;//统计字符
        if(c== '\n')
        n_lines++;//统计行
        if(!isspace(c)&&!inword){
            inword=true;//开始一个新的单词
            n_words++;//统计单词
        }
        if(isspace(c)&&inword)
        inword=false;//到达单词的末尾
        prev=c;//保存字符的值
    }
    if(prev!='\n')
    p_lines=1;
    printf("characters=%ld,words=%d,lines=%d,",
    n_chars,n_words,n_lines);
    printf("partial lines= %d\n",p_lines);
    return 0;

因为你读取字符用的是getchar(),用getchar()的时候,enter键会作为一个字符\n输入,所以不会结束。
使用enter键结束输入的情况一般有:
scanf、gets
当使用scanf函数和gets函数读取数据时,会使用enter键来触发刷新缓存事件,让程序从标准输入中读取数据。
而getchar这种读取单个字符的函数,enter键(\n)会作为一个字符被读取。

不同的读取函数,读取机制是不同的,scanf、gets这类可以读取多个字符的函数,需要有一个机制来告诉编译器本次输入结束了。
scanf中,一般用空格、enter键触发缓存刷新事件,告诉编译器本次读取完毕。空格和enter会被忽略。
gets是逐行读取字符串,使用enter键来触发内存刷新事件,告诉编译器本次读取完毕。enter会被忽略。
getchar则是逐个读取字符,会把所有的按键输入都作为一个字符读取到缓存中,getchar也需要enter来刷新缓存,但是enter也会被当作一个字符读取到缓存中,不会被忽略。

在你的代码中,是用 ‘|’ 字符来结束循环的,'\n'不等于'|',所以循环不会结束。

#define STOP '|'
while((c=getchar())!=STOP) // 结束的条件是‘|’ 字符,而不是enter键即'\n'。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632