而cin.get从文件加载时导致无限循环

时间:2015-01-21 19:04:04

标签: c++ unix c++11 cin

我有以下代码(这只是一个更大的应用程序的一部分,但问题似乎来自以下):

char inputChar;
while (cin.get(inputChar)){
    cout<< inputChar<< "\n";
}

从控制台提供应用程序输入时,例如: 'echo“aaaaa aaaaa”| tst'(上面的程序编译为tst.out)程序正常工作,但是当我通过文本文件提供输入时(即'./tst mytest.txt')似乎进入一个无限循环(光标只是移动到下一行并保持在那里,再也没有得到提示),无论文件本身的内容如何。

有没有人知道为什么会这样,以及我可以做些什么来解决这个问题。

ps:我正在unix终端上编译并运行它。

由于

3 个答案:

答案 0 :(得分:2)

如果你想同时处理文件和cin输入:

std::ifstream myFile;

if (argc > 1) 
{
    myFile.open(argv[1]);
}

if (myFile.is_open()) 
{
    readMyInput(myFile);
    myFile.close();
} else 
{
    readMyInput(std::cin);
}

void readMyInput(std::istream &inputStream)
{
    char myCharacter;
    while (inputStream.get(myCharacter)) 
    {
        cout<< myCharacter<< "\n";
    }
}

如果您不想打开文件:cat input.txt | ./tst.out将输入std::cin输入流

答案 1 :(得分:0)

这不是一个特别好的方法,可能有更好的方法,但你可以试试这个:

if(cin.get() == "SOME_CHARACTER_CHANGE_THIS") {
    cout << "SOME_CHARACTER_CHANGE_THIS_ALSO" << endl;
}

对于每个可以输入的字符。

答案 2 :(得分:0)

示例中的代码不是从文件中读取,而是从stdin读取。如果您想从文件中读取,则必须初始化ifstream,并将文件名传递到main并从中读取,而不是cin