而 cin.get 在从文件加载时会导致无限循环
while cin.get leading to an infinite loop when loading from file
我有以下代码(这只是一个更大应用程序的一部分,但问题似乎来自以下内容):
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;
}
对于可以键入的每个字符。
相关文章:
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 从文本文件加载链表并打印时无限循环
- 如何在 SFML C++游戏中将资产加载与主循环分开
- 从二进制文件加载列表后,我的代码似乎进入了无限循环
- 如何使用 for 循环将元素加载到我的每个数组中,然后将每个数组的总和输出到一个 sum 数组中
- 错误:将元素加载到矢量时无限循环
- 正在加载带有for循环的数组
- 而 cin.get 在从文件加载时会导致无限循环
- 为什么编译器在循环中从内存加载此指针
- 使用循环从加载的 TXT 文件执行计算时出现问题C++
- 通过循环加载精灵
- 为什么此循环不会加载正确的事件?
- Opencv循环检测- RAM加载
- 如何在OpenGL c++中使用SOIL加载不同的图像(循环)