So I started learning C today, and as an exercise I was told to write a program that asks the user for numbers until they type a 0, then adds the even ones and the odd ones together. Here it is:
#include <stdio.h>;
int main() {
int esum = 0, osum = 0;
int n, mod;
puts("Please enter some numbers, 0 to terminate:");
scanf("%d", &n);
while (n != 0) {
mod = n % 2;
switch(mod) {
case 0:
esum += n;
break;
case 1:
osum += n;
}
scanf("%d", &n);
}
printf("The sum of evens:%d,\t The sum of odds:%d", esum, osum);
return 0;
}
My question concerns the mechanics of the scanf() function. It seems that when you enter several numbers at once separated by spaces (eg. 1 22 34 2 8), the scanf() function somehow remembers each distinct numbers in the line, and steps through the while loop for each one respectively. Why/how does this happen?
Example interaction within command prompt:
-> Please enter some numbers, 0 to terminate:
42 8 77 23 11 (enter)
0 (enter)
-> The sum of evens:50, The sum of odds:111
I’m running the program through the command prompt; it’s compiled for win32 platforms with Visual Studio.
Notice that you’re calling scanf() each time you go through the loop; each time you call scanf() with the arguments “%d” and &n, it reads a single integer into the variable n and advances to the position immediately after that integer in the input stream.
You can sort of think of the input stream as a “string” of sorts. Suppose I typed “25 16 0”; after scanf() reads the first integer, the input stream becomes “16 0”; if you call scanf() again, you’ll read the integer 16 and the input string becomes “0”.