【问题标题】:Replacing getchar with fgetc or getc in while(getchar() != '\n');用 fgetc 或 getc 替换 getchar while(getchar() != '\n');
【发布时间】:2017-03-04 15:27:52
【问题描述】:

人们通常会提到

while( getchar() != '\n' )

在清除输入缓冲区或溢出时。

fgetcgetc 也可以。例如:

while( fgetc(stdin) != '\n' )

while( getc(stdin) != '\n' )

人们总是使用getchar有什么特别的原因吗?

使用fgetcgetc有什么缺点吗?

【问题讨论】:

    标签: c getchar fgetc getc


    【解决方案1】:

    人们只在从标准输入读取的情况下更喜欢getchar。当需要读取文件时,没有理由不将其替换为 getc/fgetc

    话虽如此,构造是危险的,因为在输入流中没有'\n' 的情况下,它可能导致无限循环。例如,如果最终用户使用 Ctrl+DCtrl+Z 关闭流,则程序会使用像你这样的while 循环永远不会退出。您需要在忽略输入的循环中检查EOF

    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF);
    

    【讨论】:

      【解决方案2】:
      • 如果您知道您正在阅读来自stdin,请使用getchar
      • 如果您正在读取任意文件指针,请使用getc
      • 如果出于某种不明原因需要确保调用的是实际函数而不是宏,请使用fgetc。 (对我来说,这些原因非常模糊,我从不调用 fgetc,我建议使用getc。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-26
        • 2015-06-04
        • 2021-07-18
        • 1970-01-01
        • 1970-01-01
        • 2011-02-02
        相关资源
        最近更新 更多