首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getchar() != EOF

getchar() != EOF
EN

Stack Overflow用户
提问于 2014-11-28 07:29:34
回答 1查看 1.2K关注 0票数 5

我正在运行C程序设计语言书中的以下程序:

代码语言:javascript
复制
#include <stdio.h>
main()
{
  int c;
  while((c=getchar()) != EOF)
    putchar(); 
}

代码语言:javascript
复制
#include<stdio.h>
int main(){
   int c = getchar();
   while(c != EOF){
      putchar(c);
      c = getchar();
   }
}

当我运行这个程序时,我会有一种无法解释的行为。如果我按照以下顺序从命令行输入字符:{'h', 'e', 'l', 'l', 'o', '\n', '^D'},则会得到以下响应:hello,在输入\n之后,程序在输入^D后退出。

但是,当我将顺序更改为:{'h', 'e', 'l', 'l', 'o', '^D'}时,会得到以下响应,打印到屏幕上:hello,但程序不会退出。一旦我进入^D,它不应该退出吗?我必须第二次进入^D程序才能退出。或者,程序只有在我在\n之后进入\n之后才退出。我不明白为什么无论何时进入^D程序都不退出。有什么想法吗?

我正在UNIX系统上运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-28 07:41:12

当您输入^D (‘结束传输’)时,输入缓冲区会被刷新,到现在为止您键入的所有内容都会发送到您的程序中(实际上没有发送^D字符)。它类似于输入换行符,但是,在这种情况下,换行符本身也会被发送。当程序读取零字符时,它认为它的输入是关闭的。当您键入换行符后加上^D或连续两个^D时,就会发生这种情况。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27183865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档