[C++]检查文件结尾
[c++]checking for end of file
我用c++构建了一个简单的Linux shell。它可以接收标准的bash命令,重定向到文件等。但是,我想要的是它能够接受输入,例如,如果我有一个.txt包含
ls -l /
some_invalid_command
echo this displays stuff
我像这样把它管进我的a.out里
$./a.out < commands.txt
我希望它在里面运行命令,就好像我输入了它们一样。但是,当我这样做时,我遇到了一个无限循环,其中"$"提示一遍又一遍地显示,直到我按 ctrl+c。我很确定原因是我没有在代码中的任何位置检查文件结尾。
所以我的问题是,在这种情况下,我将如何检查文件的结尾?我认为这个字符是"^d",但我不确定如何检查它。这样的事情会起作用吗?
if (inputString == "^d") {
exit = true;
}
我只担心也许我想在文件运行后将更多信息输入到 shell 中。 将 exit 设置为 true 将告诉 shell 关闭。
编辑:请求的代码...
void Shell::getInput() {
emptyQueue();
cout << "$ ";
getline(cin, inputString);
fillQueue();
};
void Shell::fillQueue() {
if (inputString.empty()) {
return;
};
int i = inputString.find_first_not_of(" ");
int j = inputString.find_last_not_of(" rn");
int k;
string stringToAdd;
while (i != -1) {
k = i;
while (inputString.at(k) != ' ') {
if (k == j) {
break;
};
k++;
};
if (k != j) {
k--;
};
stringToAdd = inputString.substr(i, k - i + 1);
i = inputString.find_first_not_of(" ", k + 1);
commandQueue.push_back(stringToAdd);
};
i = 0;
while (i < commandQueue.size()) {
pointers[i] = commandQueue[i].c_str();
i++;
};
};
文件的结尾本身不是字符。
当您到达文件末尾时,任何读取更多字符的尝试都会返回,并指示已读取 0 个字符。
您没有显示有问题的代码,但您必须运行一个循环,该循环从标准输入中读取下一行文本。通常,您将显式检查读取的字符数是否为 0,或者如果您使用的是 std::istream
eof()
方法。
如果文件以(默认(文本模式打开,则 Ctrl+D 将转换为文件末尾。 因此,您只需要确保循环直到不再有输入,通常:
while ( getline(cin, inputString) ) { // or while (cin>>inputString)
...
}
void Shell::getInput() {
emptyQueue();
cout << "$ ";
getline(cin, inputString);
if(feof(stdin)) {
exit = true;
return;
};
fillQueue();
};
相关文章:
- 在C++中使用 freopen 时如何检测文件结尾?
- 如何在 的开头<x>和结尾<y>之间更改带有文件输出的字符串的值
- 以 Null 结尾的字符串的"NULL"或" "符号是否存储在文件中?
- 如何在图像位中设置标志以标记音频文件的结尾
- 如何在C++中打开以特定扩展名结尾的文件
- 如何将EOF(文件结尾)放入代码::块中?
- 用 OpenCV 以文件结尾分隔
- 将头文件(.h)放在另一个文件(.h或.cpp)的开头和结尾之间的区别
- 超级强大的API-超级强大的Decoder::decode未为文件结尾返回0
- 处理导致核心转储的文件结尾错误
- 我对文件结尾感到困惑
- 如何检查 ifstream 是否是 C++ 中文件的结尾
- C++ lcov 到达了意外的文件结尾
- 如何检测 C++ 中字符串输入的文件结尾
- 意外的文件结尾(可视形式)
- [C++]检查文件结尾
- 如何处理CSV文件中多个可能的文件结尾
- 致命错误C1004:发现意外的文件结尾
- 发现OpenMP和VS 2012意外的文件结尾
- 意外的文件结尾错误