while 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 aaaaa"|tst'(上面的程序已编译为 tst.out)程序正常工作,但是当我通过文本文件(即“./tst mytest.txt”)提供输入时,似乎运行 进入无限循环(光标只是移动到下一行并保持在那里,再也不会得到提示),无论文件本身的内容如何。
有没有人知道为什么会这样,以及我可以做些什么来解决这个问题。
ps: 我正在 unix 终端上编译和 运行ning 这个。
谢谢
这不是一个特别好的方法,可能还有更好的方法,但你可以试试这个:
if(cin.get() == "SOME_CHARACTER_CHANGE_THIS") {
cout << "SOME_CHARACTER_CHANGE_THIS_ALSO" << endl;
}
对于每个可以输入的字符。
如果您想同时处理文件和 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
输入流
您示例中的代码不是从文件中读取,而是从标准输入中读取。如果你想从文件中读取,你必须初始化一个 ifstream
并将文件名传递给 main
并从中读取而不是 cin
.
我有以下代码(这只是更大应用程序的一部分,但问题似乎来自以下代码):
char inputChar;
while (cin.get(inputChar)){
cout<< inputChar<< "\n";
}
从控制台向应用程序提供输入时,例如: 'echo "aaaaa aaaaa"|tst'(上面的程序已编译为 tst.out)程序正常工作,但是当我通过文本文件(即“./tst mytest.txt”)提供输入时,似乎运行 进入无限循环(光标只是移动到下一行并保持在那里,再也不会得到提示),无论文件本身的内容如何。
有没有人知道为什么会这样,以及我可以做些什么来解决这个问题。
ps: 我正在 unix 终端上编译和 运行ning 这个。
谢谢
这不是一个特别好的方法,可能还有更好的方法,但你可以试试这个:
if(cin.get() == "SOME_CHARACTER_CHANGE_THIS") {
cout << "SOME_CHARACTER_CHANGE_THIS_ALSO" << endl;
}
对于每个可以输入的字符。
如果您想同时处理文件和 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
输入流
您示例中的代码不是从文件中读取,而是从标准输入中读取。如果你想从文件中读取,你必须初始化一个 ifstream
并将文件名传递给 main
并从中读取而不是 cin
.