-2

こんにちは、このプログラムを picodb という実行可能ファイルにコンパイルし、Linux でシェル 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を介して読み取られるものが無限に繰り返されることです.

4

1 に答える 1

0

cin >> commandは一度に 1 単語だけを読み取ります。に「t file_management」がありcommandますか? あなたのプログラムを実行すると、動作します。ただし、スクリプトを使用して無限ループで実行されたため、次の行を変更しました: while(1)->while(cin >> command)

于 2013-04-22T20:49:57.957 に答える