gpt4 book ai didi

C: printf() 和 putchar() 问题

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

我正在阅读 K&R 书籍并想以我从未尝试过的方式测试 printf() 和 putchar() 函数。我遇到了几个意外事件,想听听更有经验的程序员为什么会这样。

char c;
while((c = getchar()) != EOF) {
//put char(c);
printf("%d your character was.\n", c);
}
  1. 如何在输入流(getchar() 或 scanf() 函数)中获取 EOF(文件结尾)? getchar()/scanf() 函数无法识别的意外 key 会产生吗?
  2. 在我的书中,它说 c 必须是一个整数,因为它需要存储 EOF 并且变量必须足够大以容纳 EOF 可以容纳的任何可能的字符。这对我来说没有意义,因为EOF是一个值为-1的常量整数,即使是char也可以存储。谁能解释一下这是什么意思?
  3. 当我向 putchar() 函数发送“hello”或“hello”时会发生什么?它期望得到一个整数,但返回奇怪的输出,例如 EEoo,如果我发送后一个字符串或字符序列。
  4. 为什么当我使用上面写的 printf() 函数时我得到两个输出?一个是我输入的,另一个是整数,在 ASCII 中是行尾。它是否会产生第二个输出,因为我按了 enter,它假定这是第二个字符?

谢谢。

最佳答案

  1. 在 Linux 上,您可以使用 Ctrl+d 发送它

  2. 你需要一个 int,否则你无法区分 EOF 和最后一个可能的字符(0xFFFF 与 0x00FF 不同)

  3. putchar 想要一个字符,而不是一个字符串,如果你试图给它一个字符串,它会打印字符串地址的一部分

  4. 您只会得到一个输出:您输入的字符的 ascii 值,另一个“输入”是您在终端中输入的内容

编辑 - 关于 2 的更多细节

你需要一个int,因为getchar既可以返回值为-1(0x00FF)的字符,也可以返回值为-1(0xFFFF)的整数,它们的含义不同:值为-1的字符是一个有效字符(例如,在 latin-1 中是 ÿ),而值 -1 的整数在此上下文中是 EOF。

这是一个显示差异的简单程序:

#include <stdio.h>

int main(int argc, char ** argv) {
{
char c = 0xFF; /* this is a valid char */
if (c == EOF) printf("wrong end of file detection\n");
}
{
int c = 0xFF; /* this is a valid char */
if (c == EOF) printf("wrong end of file detection\n");
}
}

第一个测试成功,因为 0xFF == -1 for char,而第二个测试失败,因为 0x00FF != -1 for int。

我希望这能让它更清楚一些。

关于C: printf() 和 putchar() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17272977/

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