c++ - while cin.get 在从文件加载时导致无限循环

标签 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 终端上编译和运行它。

谢谢

最佳答案

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

关于c++ - while cin.get 在从文件加载时导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28074834/

相关文章:

windows - 如何在GO中实现跨平台文件锁定

c++ - 是否有任何等效于 c++ 的 mach/mach_time.h 库

c++ - 为什么我的线程有时会出现 "stutter"?

c++ - 使用 { }, { } 将多个 std::pair 传递给可变参数模板构造函数

用于删除 Map 和指针 vector 中的指针值的 C++ 通用代码

c++ - 为什么这个 C++ 程序不能编译?

c - 将结构数组放入unix中的共享内存中,以便客户端程序可以访问它

c - getopt() 解析模式不起作用

c++ - 如何防止在堆上创建对象?

c++ - 转储内存以查找 C++ 应用程序中的内存泄漏