首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >getchar()和printf()内部到底发生了什么?解释整个过程

getchar()和printf()内部到底发生了什么?解释整个过程
EN

Stack Overflow用户
提问于 2017-06-06 13:32:47
回答 2查看 663关注 0票数 3

我正在向http://www.geeksforgeeks.org/difference-getchar-getch-getc-getche/学习,当我看到这一点时,我突然想到,当getchar()和其他类似的函数返回一个int(不管是由于程序或EOF失败),那么为什么使用的格式说明符是%c,为什么不是%d(or %i)

代码语言:javascript
运行
复制
// Example for getchar() in C
#include <stdio.h>
int main()
{
   printf("%c", getchar());
   return 0;
}

我知道我们输入的字符是一个字符,它由函数getchar()接收,我们正在使用%c显示它。

但我的问题是,在整个过程中,getchar()printf()内部到底发生了什么,getchar()返回了这个整数,它被存储在哪里,以及我们输入的字符是如何被printf()显示的,即在printf()内部发生了什么

我对printf()实现做了一些研究,并了解到printf是C standard library (a.k.a )的一部分。libc),是一个可变的函数(printf),但是我不知道在这个函数中到底发生了什么,以及它是如何通过格式说明符知道它必须打印字符或int的?

请帮助我学习正在进行的整个详细过程。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-06 14:01:01

getchar的手册页如下所示:

fgetc()从流中读取下一个字符,并在文件或错误结束时将其作为unsigned char强制转换为int或EOF。 getc()等同于fgetc(),只不过它可以作为一个宏来实现,该宏可以对流进行多次评估。 getchar()等同于getc(stdin)

因此,假设您输入了字符A。假设系统使用ASCII表示字符,则此字符的ASCII值为65。因此,在本例中,getchar作为int返回65。

然后将getchar返回的65的getchar值作为第二个参数传递给printfprintf函数首先查看格式字符串,并看到%c格式说明符。printf的手册页显示了关于%c的如下内容

如果不存在l修饰符,则将int参数转换为unsigned char,并写入结果字符。

因此,printf将下一个参数读入为int。因为我们传入了一个值为65的int,所以它就是这样读的。然后将该值转换为unsigned char。由于它仍在这种类型的风潮中,它的价值仍然是65。然后,printf打印该值的字符。因为65是字符A的ASCII值,所以出现的是字符A

票数 2
EN

Stack Overflow用户

发布于 2017-06-06 13:44:53

要理解,您必须阅读默认参数提升

其中getchar()返回该整数,并将其存储在其中。

帮你处理这件事。

我们输入的字符是如何由printf()显示的

%c告诉printf()打印一个字符。

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

https://stackoverflow.com/questions/44391457

复制
相关文章

相似问题

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