首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序编译,但当提供输入时,什么也不做。

程序编译,但当提供输入时,什么也不做。
EN

Stack Overflow用户
提问于 2019-07-21 10:23:54
回答 2查看 64关注 0票数 2

我是一个初级程序员(请原谅这个非常基本的问题),我正在通过Kernighan和Ritchie的书“C编程语言”学习C。

我从书中复制了这个程序,它编译得很好,但是当输入时,程序什么也不做。

代码语言:javascript
复制
#include <stdio.h>

int main() {
   long nc;

   nc = 0;
   while (getchar() != EOF)
      ++nc;
   printf("%1d\n", nc);
 }

输出应该是输入中的字符数,但是没有发生任何事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-21 10:32:21

当遇到EOF (=文件结束)条件时,它将打印输入字符的数量。

如果您通过终端提供输入,那么就没有正常的文件端,因此您需要使用一个特殊的键盘快捷方式来发送信号,这通常是Ctrl+Z上的Ctrl+D和Unix系统上的Ctrl+D (Linux,MacOs,.)。(Windows似乎还要求您在Ctrl+Z之前和之后输入一个Enter。Ctrl+Z之前的新行字符可算作另一个字符,这实际上意味着Windows与Unixes不同,它似乎不允许您拥有不以新行结尾的文本文件,至少在没有cygwin的情况下使用混合gcc。)

如果您像在./a.out < some_file中那样通过重定向提供输入文件,那么您不必担心这一点,因为文件系统文件具有自然的目的。

票数 2
EN

Stack Overflow用户

发布于 2019-07-21 10:28:40

您应该使用EOF指示器结束流,这是Windows上的CTRL+Z和基于Linux的操作系统上的CTRL+D。当getchar()读取EOF时,它存在while循环,并将字符数输出到stdout

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

https://stackoverflow.com/questions/57132256

复制
相关文章

相似问题

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