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);
}
if I do:
./program.c 12 6
it works but if I do:
./program.c
I get a segmentation fault, why?
if(argc=3) should be if(3 == arc) //notice '=='
That's why it is always good idea to keep constant
on LHS
, this will avoid accidental assignment
Same with arc=1
Also, I moved local function definition outside main.
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[])
{
...
}
Edit: After reading comments from Paxdiablo and Shafik, I came to know most modern compiler would warn for '='
in condition. You can simply write if(argc == 3)
rather than placing constant on LHS
.