2017-03-19 19 views
0

私はCと非常に錆びています。これをコンパイルしようとすると、3つのネストされたifのそれぞれに "左辺のオペランドとして必要な左辺値"というエラーが発生します。 私はいくつかの本当にばかげた基本的な間違いをしているとはかなり確信していますが、私はそれを修正することはできません!cのargc/argv問題

また、コードは非常に素朴ですが、argvのさまざまな文字列をチェックするには良い方法があります(長さは6文字でなければなりません。最初の2文字はIC、FRまたはRGでなければなりません。数値コード)と正しい文字列を印刷しますか?

int main(int argc, char *argv[]){ 
int i=1; 

while(i < argc){ 
if(strlen(argv[i]) == 6){ 

if(argv[i][0] == 'I' && argv[i][1] = 'C' && argv[i][2] >= '0' && argv[i][2] <= '9' && argv[i][3] >= '0' && argv[i][3] <= '9' && argv[i][4] >= '0' && argv[i][4] <= '9' && argv[i][5] >= '0' && argv[i][5] <= '9'){ 
    printf("%s", argv[i]); 
} 

if(argv[i][0] == 'F' && argv[i][1] = 'R' && argv[i][2] >= 0 && argv[i][2]  <= 9 && argv[i][3] >= 0 && argv[i][3] <= 9 && argv[i][4] >= 0 && argv[i][4] <= 9 && argv[i][5] >= 0 && argv[i][5] <= 9){ 
    printf("%s", argv[i]); 
} 

if(argv[i][0] == 'R' && argv[i][1] = 'G' && argv[i][2] >= 0 && argv[i][2] <= 9 && argv[i][3] >= 0 && argv[i][3] <= 9 && argv[i][4] >= 0 && argv[i][4] <= 9 && argv[i][5] >= 0 && argv[i][5] <= 9){ 
    printf("%s", argv[i]); 
} 
} 
i++; 
} 


return(0); 
} 

EDIT:くそー、これはかなりばかな質問だったが、第二の割り当てに=の代わりに==を書きました。助けてくれてありがとう!

+0

あなたはARGV [i]が[1] =「C''はない 'どう思いますか'if'ステートメントで –

答えて

1

==(平等のテスト)の代わりに= =(値の代入)を書いたifは、それぞれの2番目のテストでタイプミスがあるからです。

0

エラーメッセージは正しいものの、直感的ではありません。次のようにコンパイラは、(私が挿入された余分な括弧に注意してください)あなたのコードを解釈する:& &は=よりも強く結合するので

if ((arg[0] == 'C' && arg[1]) = 'I') {} 

これがあります。 = = =と置き換えると、あなたは大丈夫です。

あなたはヘルパー関数を記述する必要があります

static bool parse_number(const char *arg, char ch1, char ch2, int *pnum) { 
    if (arg[0] == ch1 && arg[1] == ch2 && '0' <= arg[2] && arg[2] <= '9') { 
     char *end; 
     unsigned long num = strtoul(arg + 2, &end, 10); 
     if (*end == '\0' && end - arg == 6) { 
      *pnum = (int)num; 
      return true; 
     } 
    } 
    return false; 
} 

その後、あなたはこのようにそれを使用することができます:

int num; 
if (parse_number(argv[i], 'I', 'C', &num)) { 
    printf("IC number %d\n", num); 
}