Reputation: 9
I have a problem with scanf()
and printf()
function in a snippet of code like this:
#include <stdio.h>
int main() {
int a;
int b;
int c;
scanf("%d %d", &a, &b);
while (c >= 2) {
c = a % b;
a = b;
b = c;
printf ("%d\n", c);
}
return 0;
}
What I expect to happen, and happens in my brother's Code::Block, is for the program to wait for input from stdin
and then print to stdout
the results, one per line, until it reaches the highest common divisor.
However, when I type it in vi
and then compile it with gcc
and run the program from my terminal, the program correctly takes the input but exit without returning anything to stdout
.
If I comment out the scanf()
line and hardcode any number to a
and b
variables, everything works as expected.
I'm trying to learn C and I've read basic documentation on the functions, but I can't help to understand this kind of behaviour.
I've tried to put a setbuf(stdout, NULL)
before declaring variables but nothing changed.
Can somebody give me a clue?
Upvotes: 0
Views: 81
Reputation: 51894
There's nothing wrong with your scanf
and printf
calls but, as others have mentioned, one obvious problem is that you are testing the value of an uninitialised variable (c
).
Maybe, what you want is a do { ... } while (...);
loop, rather than a simple while
loop.
The following code will guarantee to execute the loop at least once and then, at the end of each loop, check whether or not to repeat it:
#include <stdio.h>
int main() {
int a;
int b;
int c;
scanf ("%d %d", &a, &b);
do {
c = a % b;
a = b;
b = c;
printf ("%d\n", c);
} while (c >= 2);
return 0;
}
(Alternatively, initialise c
with a value that is >= 2
, i.e. use the declaration: int c = 3;
.)
For further discussion of the do .. while
loop, see here: 'do...while' vs. 'while'
Upvotes: 1