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

while cin.get leading to an infinite loop when loading from file

本文关键字:无限循环 加载 文件 cin get      更新时间:2023-10-16

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

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

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

有没有人知道为什么会发生这种情况,以及我可以做些什么来修复这种行为。

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

谢谢

如果要同时处理文件和 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输入流

示例中的代码不是从文件中读取,而是从标准输入中读取。 如果要从文件中读取,则必须使用传递到main的文件名初始化ifstream并从中读取,而不是cin

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

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

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