首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C: printf()和putchar()问题

C: printf()和putchar()问题
EN

Stack Overflow用户
提问于 2013-06-24 10:12:39
回答 2查看 1.7K关注 0票数 3

我当时正在读K&R书,想以我从未尝试过的方式测试printf()和putchar()函数。我遇到了一些意想不到的事件,我想听听更有经验的程序员为什么会发生这种情况。

代码语言:javascript
复制
char c;
while((c = getchar()) != EOF) {
//put char(c);
    printf("%d your character was.\n", c);
}
  1. 如何在输入流(getchar()或scanf()函数)中获得EOF (文件结束)?无法被getchar()/scanf()函数识别的意外键会产生它吗?
  2. 在我的书中,它说c必须是一个整数,因为它需要存储EOF,而变量必须足够大以容纳EOF能够容纳的任何可能的字符。这对我来说没有意义,因为EOF是一个常量整数,其值为-1,甚至char都可以存储它。有人能澄清这是什么意思吗?
  3. 当我向putchar()函数发送"hello“或”hello“时会发生什么?它希望得到一个整数,但如果我发送后一个字符串或char序列,则返回奇怪的输出,如EE或oo。
  4. 为什么当我使用上面写的printf()函数时,我得到了两个输出?一个是我输入的一个,另一个是整数,在ASCII中是行的末尾。它是否产生第二个输出,因为我按回车,它假设是第二个字符?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-24 10:20:15

  1. 在Linux上,您可以用Ctrl+d发送它。
  2. 您需要一个int,否则您无法区分EOF和最后一个可能的字符(0xFFFF与0x00FF不相同)
  3. putchar需要一个字符,而不是一个字符串,如果您想给它一个字符串,它会打印字符串地址的一部分
  4. 您只得到一个输出:您输入的字符的ascii值,另一个“输入”是您在终端中输入的。

编辑-关于2的更多细节

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

下面是一个简单的程序,它显示了不同之处:

代码语言:javascript
复制
#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用于char,而第二个测试失败是因为0x00FF != -1用于int。

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

票数 3
EN

Stack Overflow用户

发布于 2013-06-24 13:24:17

  1. 必须关闭输入流才能获得EOF。通常在UNIX中使用CTRL,但请参见tty配置(stty -a)
  2. 已答
  3. 相同的
  4. 默认情况下,您的tty响应您键入的内容。如果您不想这样做,请将其设置为noecho模式(stty -echo)。就像一些贝壳把它重新放回回声一样。试着和什。您必须知道taht也会缓冲您的输入,直到返回是类型为止(如果需要,请参阅原始模式的标准手册)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17272977

复制
相关文章

相似问题

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