2014-03-05 6 views
1
int main (int argc, char *argv[]) 
{ 
    int a, b, quo, rest; 

    void division(int dividendo, int divisor, int *ptr_quociente, int *ptr_resto) 
    { 
     *ptr_quociente=dividendo/divisor; 
     *ptr_resto=dividendo%divisor; 
    } 

    if(argc=3) 
    { 
     a= atoi(argv[1]); 
     b= atoi(argv[2]);  

     division(a,b,&quo,&rest); 

     printf(" %d and %d \n",quo,rest); 
    } 
    else if (argc=1) 
     do 
     { 
      printf("type two int numbers:\n"); 

      scanf("%d %d", &a, &b); 

      division(a,b,&quo,&rest); 

      printf(" %d and %d \n",quo,rest); 

     } while(a!=0); 
} 

내가 할 경우 :왜이 세분화 오류 (코어 덤프) ??? int 주 (int argc, 문자의 *의 변수는 argv는 [])

./program.c 12 6

그것은 작동하지만 난 할 경우 :

나는 세그먼트 오류를 ​​얻을 수 ./program.c, 왜? 이 LHSconstant을 유지하는 좋은 아이디어는 항상 이유

+0

'argc = 3'은'argc == 3 '이어야합니다. –

+0

감사합니다! 나는 그것을보아야한다. 피곤한 ... – Bryant2

답변

2
if(argc=3) should be if(3 == arc) //notice '==' 

,이 arc=1

동일은 또한, 나는 주 이외의 지역 함수 정의를 이동 우발적 인 할당을 방지 할 수 있습니다.

void division(int dividendo, int divisor, int *ptr_quociente, int *ptr_resto) 

{ 

     *ptr_quociente=dividendo/divisor; 
     *ptr_resto=dividendo%divisor; 
} 

int main (int argc, char *argv[]) 

{ 
... 
} 

편집 : Paxdiablo 및 Shafik 의견을 읽은 후, 나는 대부분의 현대적인 컴파일러 상태 '='에 대한 경고 것 알게되었습니다. LHS에 상수를 입력하는 대신 간단히 if(argc == 3)을 쓸 수 있습니다.

+0

바하마, 나는 현대 컴파일러가 조건부 내에서 과제에 대해 경고 할 수 있기 때문에 "엉덩이 - 추한 형식"이라고 부르는 것을 좋아한다. 하지만 어쨌든 당신이 문제를 발견 한 이후로, 비록 내가 당신의 해결책에 비범 한 웃음을하더라도 :-) – paxdiablo

+0

Ack no, [우리가 현대 컴파일러와 함께 사용할 필요가없는 Yoda 조건] (http://stackoverflow.com/questions/22106713)/what-is-the-the-difference-between-null-pointer-vs-if-pointer-null)을 사용합니다. –

+0

@paxdiablo Shafik, 맞습니다. 다른 어떤 것보다 방어적인 프로그래밍입니다. if (호 == 3) 괜찮을 것입니다. –