C中stdin和EOF的关系
Relation of stdin and EOF in C
C 测验有这四个问题,涉及 fprintf 和 EOF。在与这些问题相关的课程部分中并没有真正解释它们,我无法在网上找到好的答案。
屏幕打印数字的原因and/or编译失败是fprintf的结果还是与EOF的关系?
#include <stdio.h>
int main(void) {
int i;
i = fprintf(stdin,"Hello!");
printf("%d",i == EOF);
return 0;
}
Answer: the program outputs 1
#include <stdio.h>
int main(void) {
int i;
i = fprintf(stderr,"Hello!");
printf("%d",i == EOF);
return 0;
}
Answer: the program outputs 0 to the stdout stream
#include <stdio.h>
int main(void) {
FILE *f;
int i = fprintf(f,"Hello!");
printf("%d",i == EOF);
return 0;
}
Answer: the compilation or execution fails
#include <stdio.h>
int main(void) {
FILE *f = fopen("file","w");
int i = fprintf(f,"Hello!");
printf("%d",i != EOF);
return 0;
}
Answer: the program outputs 1
EOF 是一个宏,通常等于 -1。
- Q1 :
stdin
是一个输入流。因此,在其上使用 fprintf 会产生冲突,这显然是由 fprintf()
和 returned -1 处理的。 (如评论中所述,出现错误时的 return 值可以是任何负数)。
- 从这个意义上说,条件
(i == EOF)
return 为真,即 1。这解释了答案。
- Q2 :
stderr
是一个输出流,意味着打印到它是成功的
i = ...
,i
包含写入的字符数。 >0
i == EOF
的计算结果为 0。
- 0 已打印
- Q3 :
fprintf
尝试打印到地址为 f
的流中
f
是一个带有垃圾值的指针,这意味着它可能指向 OS. 拥有的内存
- 对该地址的写入导致编译或执行失败
- 第四季度:
fprintf
完成它的工作并将 5 个字符写入文件 f
i
初始化为值 5
i != EOF
计算结果为 5 != -1
,为真,在内存中存储为数字 1
- 打印值为 1
C 测验有这四个问题,涉及 fprintf 和 EOF。在与这些问题相关的课程部分中并没有真正解释它们,我无法在网上找到好的答案。
屏幕打印数字的原因and/or编译失败是fprintf的结果还是与EOF的关系?
#include <stdio.h> int main(void) { int i; i = fprintf(stdin,"Hello!"); printf("%d",i == EOF); return 0; }
Answer: the program outputs 1
#include <stdio.h> int main(void) { int i; i = fprintf(stderr,"Hello!"); printf("%d",i == EOF); return 0; }
Answer: the program outputs 0 to the stdout stream
#include <stdio.h> int main(void) { FILE *f; int i = fprintf(f,"Hello!"); printf("%d",i == EOF); return 0; }
Answer: the compilation or execution fails
#include <stdio.h> int main(void) { FILE *f = fopen("file","w"); int i = fprintf(f,"Hello!"); printf("%d",i != EOF); return 0; }
Answer: the program outputs 1
EOF 是一个宏,通常等于 -1。
- Q1 :
stdin
是一个输入流。因此,在其上使用 fprintf 会产生冲突,这显然是由fprintf()
和 returned -1 处理的。 (如评论中所述,出现错误时的 return 值可以是任何负数)。- 从这个意义上说,条件
(i == EOF)
return 为真,即 1。这解释了答案。
- Q2 :
stderr
是一个输出流,意味着打印到它是成功的i = ...
,i
包含写入的字符数。 >0i == EOF
的计算结果为 0。- 0 已打印
- Q3 :
fprintf
尝试打印到地址为f
的流中
f
是一个带有垃圾值的指针,这意味着它可能指向 OS. 拥有的内存
- 对该地址的写入导致编译或执行失败
- 第四季度:
fprintf
完成它的工作并将 5 个字符写入文件f
i
初始化为值 5i != EOF
计算结果为5 != -1
,为真,在内存中存储为数字 1- 打印值为 1