gpt4 book ai didi

c - K&R 1-7 是否可以通过使用 putchar() 而不是 printf 来解决?

转载 作者:行者123 更新时间:2023-12-02 08:29:56 25 4
gpt4 key购买 nike

互联网上有很多关于这个练习的问题,但我找不到任何关于如何使用“putchar”解决这个练习的解决方案(也没有任何提示)。

Write a program to print the value of EOF.

我可以很容易地得到一个有效的答案:

printf("%d", EOF);

我想知道是否有使用“putchar”的任何已知(或合乎逻辑的)答案(我猜这是练习的全部目的,位于“getchar”和“putchar')

写作:

putchar(EOF);

int c;
c = EOF;
putchar(c);

程序只是在不显示任何文本的情况下自行启动和关闭。

最佳答案

putchar 在输出之前将其参数转换为 unsigned char(这是写入的字符,而不是十进制转换的结果)。由于 EOF 为负,此转换不保值。通常,EOF的值为-1,用8位的char,转换后的结果为255,即putchar(EOF)为相当于 putchar('\xff'),它不是可打印字符(假设是 ASCII 系统)。将输出通过管道传输到 hexdump -C 将使输出可见。

在不使用 printf 和 friend 的情况下,可以编写一个为 int 输出十进制数的函数。基本上,

print a '-' if the value is negative
for every decimal digit, starting from the highest-valued:
convert the digit's value to a character (e.g. 7 should become '7')
try to print the result (with putchar, for example)
if that fails, return an error indicator

提示:除法运算符和模运算符 /% 会很有用。

数字 '0' ... '9' 是升序的(并且是连续的);因此对于从数字值到字符的转换,添加 '0' 会产生所需的结果(3 + '0''3',例如)。

必须小心避免整数溢出,即使像 INT_MIN 这样的极端情况被传递给函数。 -INT_MIN 可能会导致溢出(实际上几乎每个系统都会发生),另一方面,正数总是可以取反。值 0 可能需要特殊处理。

(或者,可以先将数字转换为字符串,然后将其输出。大小为 1 + sizeof(int)*CHAR_BIT/3+1 + 1 的 char 数组 足够大以容纳该字符串,包括减号和 0 终止符。)

如果您遇到困难,(非标准)itoa 函数会做类似的事情,寻找示例实现可能会提供一些想法。

关于c - K&R 1-7 是否可以通过使用 putchar() 而不是 printf 来解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28189537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com