【问题标题】:Confused about "while(getchar() != '\n')"对“while(getchar() != '\n')”感到困惑
【发布时间】:2011-09-13 15:30:49
【问题描述】:

我知道getchar() 只是一个函数,获取用户输入的行的第一个字符,然后是下一个,依此类推 如果我们在一行中输入getchar(),在代码的最后,是为了让程序等待用户输入任何东西,并且在显示信息时不关闭控制台。

为什么我们使用这行代码?

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

我知道它会读取该行的所有字符,直到找到行尾然后循环中断.. 对.?但是,为什么这很有用?如果我们不写这行代码怎么办?

while((ch=fgetc(stream))!=EOF)
{
    putchar(ch);
    cha++;
    if(ch=='\n')
    {
        lines++;
        printf("Line %i is detected\n\n",lines);
        if(lines==NEW_LINE)
        {
        lines=0;
        while (getchar!='\n'); **//Here is my question**
        }
    }
}

【问题讨论】:

  • 你好,如果缩进会更可读:)
  • 我不明白你的意思?.. 请解释一下

标签: c while-loop getchar putchar


【解决方案1】:

看起来这段代码正在分页输出。

它从流中一次读取一个字符并使用putchar 将其输出到stdout。然后,如果该字符是换行符,它会增加行数。如果该计数已达到某个定义的常量STOP_LINE,则该计数将被重置并

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

等待用户按回车键。然后循环继续。

【讨论】:

  • 事实上如果没有那行代码 -while(getchar()!='\n');它根本没有区别,程序还等待其他任何东西,它不会关闭 - 当在终端或 Eclipse 编译器本身的 GUI 控制台上运行时 - 请解释原因
  • 没有看到其余的代码,或者不知道stream 是什么,我们真的无法分辨。也许stream 的行数少于STOP_LINE;或者永远不会产生EOF,所以外循环永远不会退出?
【解决方案2】:
while(getchar()!='\n');

读取该行的所有字符,直到找到行尾。

不过,会有更有效的方法来做到这一点(比如使用缓冲流,或者尽可能读取更大的块)

【讨论】:

  • 而且不是很安全。如果遇到EOF(或错误),这将进入无限循环。
  • 但我在我正在学习的书中的不同代码中看到了很多,所以阿诺德发现行尾之后是什么?实际功能是什么。以及如何使用这种更有效的方式?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多