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日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。