C ++程序,输入无限循环

时间:2013-04-22 18:39:10

标签: c++ linux bash infinite-loop

您好我将这个程序编译成一个名为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重复到无限时读取的内容。

1 个答案:

答案 0 :(得分:0)

cin >> command一次只会读一个字。您确定command中有“t file_management”吗?当我运行你的程序时,它工作。但是它仍然使用脚本在无限循环中运行,因此我更改了以下行:while(1) - &gt; while(cin >> command)