与getchar()putchar()相关的C编程(初学者帮助)

时间:2012-05-23 06:45:04

标签: c while-loop getchar putchar

我是C编程的新手,想要清楚,似乎是一个愚蠢的怀疑......

代码:

#define EOF 0
main()
{ 
    int c;

    c=getchar();
    while (c!= EOF) 
    {
        putchar (c); 
        c= getchar();
    }
}

这应该只返回我输入的值......但是相应的......当我输入0时它不应该终止吗?如果不是......'while'下的陈述究竟是什么意思? 任何帮助将非常感谢家伙:)

4 个答案:

答案 0 :(得分:2)

EOF表示当你点击linux中的ctrl + d时,它发送EOF信号,它不一定是0

答案 1 :(得分:1)

getchar函数返回输入的ASCII值(48为零,或'0'),或者在头文件EOF中返回一个名为<stdio.h>的值(通常为-1) )。

因此,如果您想要停止在EOF(正确的EOF,而不是您定义的那个)或者如果用户写入零,那么这将更好地工作:

#include <stdio.h>

int main()
{
    int c = getchar();

    while (c != EOF && c != '0')
    {
        putchar(c);
        c = getchar();
    }

    return 0;
}

答案 2 :(得分:1)

EOF肯定不是0(也不是'0',char字面等于48)。它根本不是charstdio.h(您应该#include - ing!)将其定义为-1。它表示您正在阅读的文件中没有更多数据。它不是流中的一个字节,而是io库指示它已完成的方式。

getchar需要返回int的全部原因是文件结尾指示符不可能是文件中的有效字节。

其他功能表示已达到不同的EOF:fgets()返回NULL。返回读取的字节数的read()返回0,表示它什么都不读。

答案 3 :(得分:0)

当您输入0时,它实际上不是零,只是ASCII character 0。它的数值为48,可以通过printf("%d\n", '0');验证,它打印48. EOF实际零,也就是说,它的表示基本上为零。