首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用getchar()和putchar()复制文件

使用getchar()和putchar()复制文件
EN

Stack Overflow用户
提问于 2018-09-11 07:53:30
回答 1查看 642关注 0票数 0

我知道这之前已经讨论过了,但我想确保我正确地理解了这个程序中发生了什么,以及为什么。在丹尼斯·里奇的课本“C编程语言”的第20页上,我们看到了这个程序:

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

int main()
{

int c;

c = getchar();

while(c != EOF){
    putchar(c);
    c = getchar();
}

return 0;

}

在执行时,程序读取每个键入的字符,并在用户按enter键后以相同的顺序打印出来。除非用户手动退出控制台,否则此过程将无限期重复。事件的顺序如下:

  1. getchar()函数读取键入的第一个字符并将其值赋给c.
  2. Because c是整数类型,getchar()传递给c的字符值被提升为相应的ASCII值。
  3. 现在c已初始化为某个整数值,while循环可以测试该值是否等于文件结束字符。由于EOF字符的宏值为-1,并且可以键入的字符都没有负的十进制ASCII值,因此while循环的条件将始终为true。
  4. 一旦程序验证c != EOF为true,就会调用putchar()函数,该函数会输出c中包含的字符值。while
  5. 再次调用getchar(),因此它读取下一个输入字符,并将其值传递回while循环的开头。如果用户在执行之前只键入了一个字符,那么程序将读取<return>值作为下一个字符,并打印一个新行,等待下一个输入被键入。

这些都是完全正确的吗?

EN

回答 1

Stack Overflow用户

发布于 2018-09-11 08:04:13

是的,你基本上已经掌握了。但它更简单:getcharputchar已经分别返回和接受int类型。所以不会发生类型提升。您只是接收字符,然后循环发送它们,直到您看到EOF

您对为什么这些应该是int而不是某种char形式的直觉可能是正确的:int类型允许在任何可能的字符值的值范围之外的定点EOF值。

(在这一点上,K&R stdio函数非常老,他们不知道Unicode和etc,而且一些基本的设计原理即使不是模糊的,也是不相关的。现在没有多少实用的代码会使用这些函数。这本书在很多方面都很优秀,但代码示例相当陈旧。)

(另外,顺便说一下,你的问题标题指的是“复制文件”,你仍然可以这样做,但还有更规范的方法)

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

https://stackoverflow.com/questions/52266912

复制
相关文章

相似问题

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