将 EOF 与 Getchar () 函数的错误区分开来 [duplicate]

Distinguish EOF from error for the Getchar () function [duplicate]

提问人:Qualcomm 提问时间:7/15/2020 更新时间:7/15/2020 访问量:272

问:

重写程序以区分 EOF 和 Getchar () 函数的错误。换句话说,getchar()在错误期间和EOF文件末尾都会返回,您需要区分这一点,输入不应该通过FILE STREAM并处理putchar()函数错误。

#include <stdio.h>
  
int main() { 

    long nc;
    nc = 0;
    while (getchar() != EOF)
    ++nc;
    printf ("%ld\n", nc);
    
  }
c eof getchar putchar

评论

2赞 HolyBlackCat 7/15/2020
检查返回后或返回后。feofferrorEOF
0赞 Qualcomm 7/15/2020
但是 feof 和 ferror 不就是 FILE STREAM 吗?
0赞 HolyBlackCat 7/15/2020
代替文件使用。stdin
0赞 Adrian Mole 7/15/2020
@P.P 虽然我并不是真的在争论你的接近重复,但这个问题有一个额外的问题,即必须用作论据,这在任何一个欺骗目标中都不明显。stdinFILE*

答:

0赞 Adrian Mole 7/15/2020 #1

您可以使用以下参数检查 feof() 或 ferror() (或两者) 的返回值:stdinFILE*

#include <stdio.h>
  
int main() { 

    long nc;
    nc = 0;
    while (getchar() != EOF) ++nc;
    printf ("%ld\n", nc);
    if (feof(stdin)) printf("End-of file detected\n");
    else if (ferror(stdin)) printf("Input error detected\n");
//  Note: One or other of the above tests will be true, so you could just have:
//  else printf("Input error detected\n"); // ... in place of the second.
  }

评论

0赞 HolyBlackCat 7/15/2020
您应该始终获得一个或另一个,因此可能可以替换为 .else if (...)else
0赞 Adrian Mole 7/15/2020
@HolyBlackCat 是的,确实如此(见编辑)。但是,我想演示这两个函数调用的用法。
0赞 chux - Reinstate Monica 7/15/2020
迂腐:在采用与 相同大小的不常见平台(一些旧图形处理器)上,两者都可能不成立。但几乎不需要为这种畸变编码。如果代码是由于第一个输入错误和下一个文件末尾造成的,则可以同时获得 true。unsigned charintgetchar(); while (getchar() != EOF) ++nc;