Why doesn't the call scanf("%d", i) work?
The arguments you pass to scanf must always be pointers: for each value converted,
scanf ``returns'' it by filling in one of the locations you've passed
pointers to. To fix the fragment above, change it to scanf("%d", &i) .