【问题标题】:How does the EOF macro work with getchar?EOF 宏如何与 getchar 一起使用?
【发布时间】:2016-01-15 16:59:50
【问题描述】:
#include<stdio.h>

int main(void) {
    FILE *fp;
    int ch;
    fp = fopen("input.txt", "w");
    printf("Enter data");
    while ((ch = getchar()) != EOF) {
        putc(ch, fp);
    }
    fclose(fp);
    fp = fopen("input.txt", "w");
    while ((ch = getc(fp)) != EOF) {
        printf("%c", ch);
    }
    fclose(fp);
}

第一个while 循环如何停止用户输入? 由于存在EOF 作为条件。

否则我需要use for 循环吗?

【问题讨论】:

  • ch 必须定义为int
  • 第二个 fp=fopen("input.txt","w"); : "w" --> "r"
  • int main 不是void main
  • 我不明白这个问题是关于什么的。请以这种方式重新格式化问题:“程序显示 /behavior X/。我很困惑,因为我期待 /behavior Y/。” 换句话说,发生或未发生的事情是相对的达到你的预期?

标签: c eof getchar


【解决方案1】:

EOF 是一个值,而不是一个函数。它本质上被定义为一个宏。

供参考,来自C11,第 7.21.1 章,&lt;stdio.h&gt;

EOF
它扩展为一个整数常量表达式,类型为int 和一个负值,即 由几个函数返回以指示文件结束,即不再有来自 流;[...]

如果getchar()失败,它将返回一个定义为EOF的值。

引用手册页(强调我的

fgetc()getc()getchar() 将读取的字符作为无符号字符强制转换为 int 或 文件末尾的 EOF 或错误。

EOF 表示可能不适合 char 类型的值。 ch 变量必须使用 int 类型。

第一个while循环如何停止用户输入?

在 Linux 上使用 CTRL+D,在 Windows 上使用 CTRL+Z

【讨论】:

  • @OmkarPednekar 在屏幕上打印什么?如果getchar()失败,则返回EOF,条件为假。
  • 在第二个 while 循环中,我在屏幕上打印文件中的数据
  • @OmkarPednekar 您是否按照答案中的建议将char ch; 更改为int ch;
  • @OmkarPednekar 尝试输入 CTRL+Z
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多