我正在使用C++的shell项目。我需要的所有功能都在那里。但是,有一个问题。我的退出条件是当用户输入“退出”时,它可以正常工作,除非前面的命令是一个随机字符串(例如:asldjkf)。当输入一个随机字符串,然后在下一个提示符处输入exit时,它会再次循环,然后在用户再次输入“exit”时退出。退出条件满足时程序不能退出?
我刚刚被使用COUT调试和我知道的条件,退出得到满足。 ?谁能告诉我什么可能发生在这里'
以下是我在main()
UNIX_shell myShell;
char * args[100];
string check = "";
argsIndex = 0;
string userIn;
while(myShell.exitstatus == false)
{
std::cin.getline(myShell.userIn, 256);
check = string(myShell.userIn);
cout << check << endl;
myShell.getArgs(check, args);
if(myShell.exitstatus == false && string(myShell.userIn) != "exit")
cout << myShell.userName + "@" + myShell.hostName + ":~" + getcwd(NULL, 0) + "/";
}
return 0;
我打电话,这里是其中的退出条件被调用getArgs()后立即满足:
void UNIX_shell::getArgs(string check, char * args[])
{
cout << "check is" << check << endl;
if(check[0] == 'e' && check[1] == 'x' && check[2] == 'i' && check[3] == 't')
{
cout << "shadoom" << endl;
this->exitstatus = true;
cout << "exit = "<< exitstatus << endl;
return;
}
...
所以,如果我运行了一个程序,输入类似LS,或ps -aef,然后键入exit,一切都正常运行,然后,程序退出。
但是,如果我跑我的程序,在命令行中输入“狗屎”,然后输入“exit”的提示下,我获得了第二个提示,然后当我再次键入退出,退出。我一直在尝试调试一个多小时。感谢您提前提供任何帮助。
http://stackoverflow.com/help/mcve – user657267 2015-02-24 08:22:28
您的代码看起来并不像它实际上编译 - 你只需复制并粘贴各种比特在一起的那种属于彼此,但实际上不是程序如何?你似乎在用'char *'混合'std :: string'的方式不应该是必要的......这可能是也可能不是问题。 – 2015-02-24 08:46:44
你应该与所有警告和调试信息('G ++ -Wall -Wextra -g')编译然后**使用调试器**('gdb') – 2015-02-24 10:21:35