0

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

代码:

#define EOF 0
main()
{ 
    int c;

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

这应该只返回我输入的值......但相应地......当我输入 0 时它应该终止吗?如果不是......“while”下的语句究竟意味着什么?任何帮助将不胜感激伙计们:)

4

4 回答 4

2

EOF意味着当你点击时,例如,ctrl + d在 linux 中,它发送EOF信号,它不一定是0.

于 2012-05-23T06:47:13.053 回答
1

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

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

#include <stdio.h>

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

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

    return 0;
}
于 2012-05-23T06:52:10.810 回答
1

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

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

其他函数表明到达 EOF 的方式不同:fgets()返回NULLread()返回读取的字节数返回0,表示它什么也读不到。

于 2012-05-23T06:52:18.577 回答
0

When you enter a 0, it's not actually a zero, just the ASCII character 0. It has a numerical value of 48, which can be verified by printf("%d\n", '0');, which prints 48. An EOF is an actual zero, that is, it's representation is essentially zero.

于 2012-05-23T06:52:19.997 回答