Firelick 2022-07-13 11:42 采纳率: 100%
浏览 138
已结题

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;

  • 写回答

3条回答 默认 最新

  • 关注

    因为你读取字符用的是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'不等于'|',所以循环不会结束。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月21日
  • 已采纳回答 7月13日
  • 修改了问题 7月13日
  • 创建了问题 7月13日

悬赏问题

  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?