gpt4 book ai didi

c++ - [c++]检查文件结尾

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:44 27 4
gpt4 key购买 nike

我用 C++ 构建了一个简单的 Linux shell。它可以接受标准的 bash 命令,重定向到文件等。但是,我想要的是它能够接受输入,例如,如果我有一个包含 commands.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(" \r\n");
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() 方法。

关于c++ - [c++]检查文件结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35399672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com