c++程序在condition为假之前退出循环
C++ Program exits loop before condition is false
该方法接受一个向量(inputVector,成员变量)并将其分割为char*[]。每当在vector中遇到";"时,打印出args中存储的最后一组char*s。尽管vector的大小为14,但循环在第5次循环时退出。
Vector data(换行符分隔项):
/bin/echo
killroy
是
,
,
xyzzy
,
nonexistent-program
,
/bin/true
,
/bin/false
;
void TrivialShell::splitArguments() {
char* args[MAX_ARGS];
int inputVectorIdx = 0;
int currentArgsIdx = 0;
int startingArgsIdx = 0;
while (inputVectorIdx < inputVector.size()) {
if (inputVector[inputVectorIdx] == ";") {
for (int k = startingArgsIdx; k <= currentArgsIdx; k++) {
cout << args[k];
}
startingArgsIdx = currentArgsIdx + 1;
}
else {
args[currentArgsIdx] =
const_cast<char*>(inputVector[inputVectorIdx].c_str());
}
inputVectorIdx++;
currentArgsIdx++;
}
}
for (int k = startingArgsIdx; k < currentArgsIdx; k++) {
// ^^
cout << args[k];
}
你试图打印一个太多。你没有说过,但我肯定它不只是跳过循环,而是退出程序。
你有一个bug。当你进入循环
if (inputVector[inputVectorIdx] == ";") {
for (int k = startingArgsIdx; k <= currentArgsIdx; k++) {
cout << args[k];
}
startingArgsIdx = currentArgsIdx + 1;
}
你的索引迭代器currentArgsIdx大于数组args
的实际数据大小。所以你在做cout<<args[3]
的时候已经有一些垃圾了。这是因为你在while循环结束时++了你的索引:
inputVectorIdx++;
currentArgsIdx++;
以不同的方式排列或将条件更改为:
for (int k = startingArgsIdx; k < currentArgsIdx; k++) {
^^^
cout << args[k];
}
相关文章:
- C++ 自动点击器未退出循环
- 使用 while 或 do while 退出循环
- 退出循环,除非未给出输入
- C++线程退出循环条件
- 在C++测试家庭作业问题中的字符串输入时无法退出循环(作为数据验证)
- 虽然具有多个 OR 条件的循环不退出循环
- 如果程序退出循环是goto已删除的本地变量
- 中断语句未退出循环
- 计算平均值,而不向退出循环添加负等级
- 使用键盘挂钩时无法动态退出循环
- 定义时间后退出C 循环
- 使用goto来干净地退出循环
- getchar 有什么问题(因为程序在没有检查的情况下退出循环)
- 尝试退出循环时,Ctrl+Z 不起作用
- 如何获取用户输入以退出循环
- 正在销毁线程并退出循环
- 中断语句不会退出循环
- 通过输入一个特定的字母c++来退出循环
- 在c++中,当输入不是unsigned时立即退出循环
- 编程原理和实践使用C++while-loop演练。找不到退出循环的方法