C:printf()和putchar()问题

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

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


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

  • 你需要一个int,否则你不能区分EOF和最后一个可能的字符(0xFFFF不等于0x00FF)

  • 如果你想给它一个字符串, putchar一个字符,而不是一个字符串,它会打印一部分字符串地址

  • 你只能得到一个输出:你输入的字符的ascii值,另一个“输入”是你在终端输入的内容

  • 编辑 - 关于2的更多细节

    你需要一个int,因为getchar可以返回一个值为-1(0x00FF)的字符和一个值为-1(0xFFFF)的整数,它们不具有相同的含义:值-1的字符是一个有效的字符例如,它是拉丁-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 detectionn");
        }
        {
            int c = 0xFF; /* this is a valid char */
            if (c == EOF) printf("wrong end of file detectionn");
        }
    }
    

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

    我希望这可以让它更清晰。


  • 您必须关闭输入流以获取EOF。 通常在UNIX中使用CTRL-D,但请参阅tty config(stty -a)
  • 已经回答
  • 相同
  • 你的tty回应你默认输入的内容。 如果你不想要这个,把它设置为noecho模式(stty -echo)。 因为一些炮弹再次呼应回声。 用sh试试。 你必须意识到tty也会缓冲你的输入,直到RETURN是类型的(如果你需要的话,参见原始模式的stty手册)。
  • 链接地址: http://www.djcxy.com/p/31535.html

    上一篇: C: printf() and putchar() questions

    下一篇: ifstream get line change output from char to string