问题描述
C测验有关于fprintf和EOF的这四个问题。在课程中与这些问题相关的部分并没有对它们进行真正的解释,我无法在线找到适合他们的好答案。
是屏幕打印和/或编译中的数字未能通过fprintf的结果或与EOF的关系的原因吗?
#include <stdio.h> int main(void) { int i; i = fprintf(stdin,"Hello!"); printf("%d",i == EOF); return 0; }
答案:程序输出1
#include <stdio.h> int main(void) { int i; i = fprintf(stderr,i == EOF); return 0; }
#include <stdio.h> int main(void) { FILE *f; int i = fprintf(f,i == EOF); return 0; }
答案:编译或执行失败
#include <stdio.h> int main(void) { FILE *f = fopen("file","w"); int i = fprintf(f,i != EOF); return 0; }
答案:程序输出1
解决方法
EOF是一个通常等于-1的宏。
- 第一季度:
-
// router.js router.post('/v1/something-protected',requireAuth,checkRole('commercial'),(req,res) => { // do what you want... })
是输入流。因此,在其上使用fprintf会产生冲突,显然由stdin
处理并返回-1。 (如注释中所述,如果发生错误,则返回值可以是任何负数)。 - 从这种意义上说,条件
fprintf()
返回的真值为1,这说明了答案。
-
- 第二季度:
-
(i == EOF)
是输出流,这意味着成功打印到其中 -
stderr
,i = ...
包含写入的字符数。 > 0 -
i
的值为0。 - 0被打印
-
- 第三季度:
-
i == EOF
尝试打印到地址为fprintf
的流中 -
f
是带有垃圾值的指针,这意味着它可能指向操作系统拥有的内存。 - 对该地址的写操作导致编译或执行失败
-
- 第四季度:
-
f
完成工作并将5个字符写入文件fprintf
-
f
初始化为值5 -
i
的计算结果为i != EOF
,这是正确的,将其作为数字1存储在内存中。 - 打印的值为1
-