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

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 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!
  • ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?
  • ¥15 QTOF MSE数据分析
  • ¥15 平板录音机录音问题解决