我正在向http://www.geeksforgeeks.org/difference-getchar-getch-getc-getche/学习,当我看到这一点时,我突然想到,当getchar()和其他类似的函数返回一个int(不管是由于程序或EOF失败),那么为什么使用的格式说明符是%c,为什么不是%d(or %i)。
// 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的?
请帮助我学习正在进行的整个详细过程。
发布于 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值作为第二个参数传递给printf。printf函数首先查看格式字符串,并看到%c格式说明符。printf的手册页显示了关于%c的如下内容
如果不存在
l修饰符,则将int参数转换为unsigned char,并写入结果字符。
因此,printf将下一个参数读入为int。因为我们传入了一个值为65的int,所以它就是这样读的。然后将该值转换为unsigned char。由于它仍在这种类型的风潮中,它的价值仍然是65。然后,printf打印该值的字符。因为65是字符A的ASCII值,所以出现的是字符A。
发布于 2017-06-06 13:44:53
https://stackoverflow.com/questions/44391457
复制相似问题