2017-03-19 10 views
0

나는 C와 매우 녹슬었고, 이것을 컴파일하려고 할 때, 세개의 중첩 된 if 각각에 "lvalue가 할당의 왼쪽 피연산자로 필요하다."라는 오류가 계속 발생한다. 나는 정말로 내가 정말로 바보 같은 기본적인 실수를하고 있다고 확신한다. 그러나 나는 그것을 고칠 수 없다!C에서 argc/argv 문제

또한 코드는 매우 순진하며, argv의 다양한 문자열을 검사하는 더 좋은 방법이 있습니다 (길게는 6 문자 여야합니다. 처음 2 문자는 IC, FR 또는 RG 중 하나 여야하며 나머지는 4이어야합니다. 숫자 코드) 올바른 문자열을 인쇄 하시겠습니까?

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); 
} 

편집 : 젠장, 이것은 두 번째 과제에서 == 대신 ==를 쓰면서 꽤 바보 같은 질문이었습니다. 도와 주셔서 감사합니다!

+0

를'는 argv는 [I] [1] = 'C''는 않습니다 'if' 문에서 –

답변

1

== (평등성 테스트) 대신 = (값 지정)을 쓰면서 각 if의 두 번째 테스트에 오타가 있기 때문입니다.

0

오류 메시지는 정확하지만 직관적이지 않습니다. 다음과 같이 컴파일러 (I가 삽입 여분의 괄호주의) 코드를 해석 : & &이 =보다 긴밀하게 결합하기 때문에

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); 
}