您好我将这个程序编译成一个名为picodb的可执行文件,并尝试通过linux上的shell bash脚本运行它。
int main(int argc, char** argv) {
Debbuger DB(argc,argv);
char command[12];
int len;
bool valid;
while(1)
{
valid=true;
cin.clear();
cin>>command;
len=strlen(command);
if(command[0]=='t')
{
if(strcmp(command,"trace")==0 || len==1)
{
cin>>command;
valid=DB.Trace(command);
}
else valid=false;
}
else if(command[0]=='r')
{
if(strcmp(command,"redirect")==0 || len==1)
{
char stream[6],file[15];
cin>>stream; cin>>file;
valid=DB.Redirect(stream,file);
}
else valid=false;
}
else if(command[0]=='b')
{
if(strcmp(command,"blocking-mode")==0 || len==1)
{
cin>>command;
valid=DB.Blocking_mode(command);
}
else valid=false;
}
else if(command[0]=='l')
{
if(strcmp(command,"limit-trace")==0 || len==1)
{
int n;
cin>>n;
valid=DB.Limit_Trace(n);
}
else valid=false;
}
else if(command[0]=='g')
{
if(strcmp(command,"go")==0 || len==1)
{
DB.Go(argv[1]) ;
}
}
else if(command[0]=='q')
{
if(strcmp(command,"quit")==0 || len==1)
return 0;
else
valid=false;
}
else if(command[0]=='h')
{
if(strcmp(command,"help")==0 || len==1)
DB.Help();
else valid=false;
}
else valid =false;
if(valid==false)
{
cout<<"Invalid command"<<endl;
}
}
}
脚本是这样的:
#!/bin/bash
./picodb << EOF
t file_management
r stdin input.txt
EOF
但是当我执行这个脚本时,程序进入无限循环,它获得“t file_management”并且永远不会停止或更改此输入。我打印了字符串命令,它总是将值“t file_management”作为第一个参数。我无法弄清楚我做错了什么。我尝试在终端运行程序,手动输入并正常工作。
编辑:为了使它更清楚,这应该是一个用户界面。在你输入quit之前,它永远不会出现循环。问题是通过bash重复到无限时读取的内容。
答案 0 :(得分:0)
cin >> command
一次只会读一个字。您确定command
中有“t file_management”吗?当我运行你的程序时,它工作。但是它仍然使用脚本在无限循环中运行,因此我更改了以下行:while(1)
- &gt; while(cin >> command)