【问题标题】:cin.get() is not getting out of loopcin.get() 没有脱离循环
【发布时间】:2010-07-01 15:52:31
【问题描述】:

我正在使用以下代码:

#include <stdio.h>
#include <iostream>
using namespace std;

int main ()
{
    char c ;
    c = cin.get() ;
    do {
        cout.put(c) ;

        c = cin.get() ;
    } while ( !cin.eof()) ;

    cout << "coming out!" << endl;
    return 0;
}

上面代码的问题是,它没有跳出循环,这意味着它没有打印“出来”。任何人都可以帮助为什么会这样?我正在 mac 和 linux 上测试这个程序。

谢谢

【问题讨论】:

    标签: c++


    【解决方案1】:

    只要它得到文件结尾,它就会打印“出来”。如果您将文件重定向到它,它将退出循环

    ./program < file
    

    或自己发送文件结尾,按 ctrl+d (linux) 或 ctrl+z (dos)

    【讨论】:

    • 好吧,如果我使用下面的命令来运行它,它就出来了。 ./main 输出.txt。但是,如果我可以在命令提示符下输入的话,还有吗?谢谢
    • 如果我按 ctrl+d (linux),它不会打印“出来”
    • 正如其他人提到的(对于dos/windows),我刚刚补充说,当你结束向它传输信息时,你总是可以告诉程序
    • 你必须确保你在一个空行上点击它(就在输入之后)
    【解决方案2】:

    除非您按 Ctrl+Z,否则标准输入永远不会遇到 EOF。

    因此,cin.eof() 始终为假。

    要修复它,请按 Ctrl+Z 发送文件结束符。
    或者,您可以更改条件。 (例如,while(c != '\n')

    【讨论】:

    • 虽然您的答案 while(c != '\n') 在终端上有效,但是当我尝试使用文件输入时它卡住了。无论如何,谢谢。
    【解决方案3】:

    在这里工作得很好:) 如果您在终端中运行它,您必须将 EOF 发送到该终端。在 *nix 上,这将是 Control + D。不幸的是,我不能说任何关于 Windows 的内容。

    编辑:正如其他人指出的那样:Ctrl + Z 将是 Windows 发送 EOF 的方式。

    【讨论】:

      【解决方案4】:

      您需要按 CTRL-Z 来模拟 EOF (End-of-File) 并退出循环。

      如果你不按 CTRL-Z,循环将永远继续运行。

      【讨论】:

      • 或 CTRL-D 在非 Microsoft 平台上。
      【解决方案5】:

      我将对意图进行猜测,因为该代码没有任何问题,但它可能不是您想要的,并且还会建议一个 while 循环 uhhh.. 而我正在这样做。

      #include <stdio.h>
      #include <iostream>
      using namespace std;
      
      bool is_terminator(char ch)
      {
          return ch != '\n' && ch != '\r';
      }
      
      int main ()
      {
          char ch;
          while (cin.get(ch) && !is_terminator(ch) )
              cout.put(ch);
      
          cout << "coming out!" << endl;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-16
        • 1970-01-01
        • 1970-01-01
        • 2019-08-12
        • 2017-12-21
        • 1970-01-01
        • 2012-10-15
        相关资源
        最近更新 更多