cin.get()没有走出循环

时间:2010-07-01 15:52:31

标签: c++

我使用以下代码:

#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上测试这个程序。

由于

5 个答案:

答案 0 :(得分:5)

如果获得文件结尾,它会打印出“”。如果使用

将文件重定向到循环,它将退出循环
./program < file

或者通过点击ctrl + d(linux)或ctrl + z(dos)来自己发送文件结尾

答案 1 :(得分:3)

标准输入永不击中EOF,除非您按Ctrl + Z。

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

要解决此问题,请按 Ctrl + Z 发送文件结束字符。
或者,您可以更改条件。 (例如,while(c != '\n')

答案 2 :(得分:2)

在这里完美运行:)如果你在终端中运行它,你必须发送EOF到这个终端。在* nix上,这将是Control + D.不幸的是,我无法谈论Windows。

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

答案 3 :(得分:1)

您需要按CTRL-Z来模拟EOF(文件结束)并退出循环。

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

答案 4 :(得分:0)

我要猜测一下意图,因为这个代码并没有什么问题,但它可能不是你想要的,并且还会建议一个while循环呃......而我正在使用它。

#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;
}