2017-02-07 15 views
-2

私のプログラムは、シェルでのやり方と同じように、ユーザーが終了時に入力すると終了します。まず、オンラインでsyscallがループで呼び出せるかどうかを確認しましたが、配列内の文字のインデックスが間違っていることに気付きました。なぜこれらは変化しているのですか?私がプログラムを実行して終了時にタイプしたとき、私のプログラムはテスト目的のために3番目の指標を打ち、それは「e」を返しました。だから私はそれが反転され、すべての値を反転されたと思って、私の出口はまだ動作しませんでした。根本的な問題が何であるかについての考えはありますか?'exit'文字列をチェックするときにループ内でコードが終了しないのはなぜですか?

#include <stdio.h> 

//Abstract: This program runs a script to emulate shell behavior 
#define MAX_BIN_SIZE 100 
int main() {  //Memory allocation 
char * entry[MAX_BIN_SIZE]; 
    while(1) 
    { 

    printf("msh>"); 

    fgets(entry,MAX_BIN_SIZE,stdin); //Getting user input 


    if(entry[0]=='t' && entry[1]=='i' && entry[2]=='x' && entry[3]=='e') 
     { 
       //printf("Exiting"); 
       exit(0); //exit(system call) 
       break; 
       printf("Inside of exit"); 
     } 
    printf("msh> you typed %s %c %c %c %c",entry,entry[3],entry[2],entry[1],entry[0]); //returning user input            
    } 
return 0; 
} 
+0

デバッガで見たときのエントリは何でしたか?あなたはそれが 'tixe'を持っているかどうかをテストします、それはおそらくそれを含んでいません。 (そしてBLUEPIXYが言ったこと) – pm100

+1

'char * entry [MAX_BIN_SIZE];' - > 'charのエントリ[MAX_BIN_SIZE];' – BLUEPIXY

+4

このコードが間違っているところでヒントを得ているコンパイラの警告を受け取ったはずです。それらを読みます。彼らは重要です。 – user2357112

答えて

1

私は申し訳ありませんが、コメントを追加するには評判ポイントが足りませんが、@ lundmanは正しいです。私はあなたがエントリへのポインタを作成する必要はないと思う。また、逆の順序で「exit」をチェックしています。私はコードを試して編集しました。これはうまくいくようです:

#include <stdio.h> 

//Abstract: This program runs a script to emulate shell behavior 
#define MAX_BIN_SIZE 100 
int main() 
{  //Memory allocation 
    char entry[MAX_BIN_SIZE]; 
    while(1) 
    { 

     printf("msh>"); 

     fgets(entry,MAX_BIN_SIZE,stdin); //Getting user input 


     if(entry[0]=='e' && entry[1]=='x' && entry[2]=='i' && entry[3]=='t') 
     { 

      printf("Inside of exit");//printf("Exiting"); 
      exit(0); //exit(system call) 
     } 
     printf("msh> you typed %s %c %c %c %c\n",entry,entry[3],entry[2],entry[1],entry[0]); //returning user input 
    } 
    return 0; 
} 
+0

'string.h'を使用して、if(strstr(entry、" exit "))'を単純化して、exitがエントリ文字列に含まれているかどうかを調べることができます。 strstrの結果がエントリと同じ場所を指す場合ちょっときれいに見えます。 – ridecar2

関連する問題