When completing tasks from the seventh chapter, for the first time I encountered a “pinched cycle”. Let’s say the user enters the character q into a field (don’t do this unless you have the ability to interrupt the program):
#include <stdio.h>
int main (void)
{
int n;
scanf("%d", &n);
while (n > 0)
{
printf("Enter 0 to quit:\n");
scanf("%d", &n);
}
getchar();
return 0;
}
The program will get stuck in an infinite loop when entering any character value. Why so?
The fact is that if the type of a variable in scanf does not match, the program does not read it; but it does not remove from the buffer. As a result, the cycle returns to it endlessly.
Why is the symbol not removed? This is necessary so that if you read a sequence, for example, scanf with input %d%f and on input you have 123Vasia — scanf does not overwrite the V character when it reaches it.
To avoid such errors, it is necessary to clear the buffer, for example, like this:
#include <stdio.h>
int main (void)
{
int n;
scanf("%d", &n);
while (n > 0)
{
while (getchar() != '\n')
continue;
printf("Enter 0 to quit:\n");
scanf("%d", &n);
}
getchar();
return 0;
}
Write your comments!
I love you