When reading input using scanf
, the input is read after the return key is pressed but the newline generated by the return key is not consumed by scanf
, which means the next time you read a char
from standard input there will be a newline ready to be read.
One way to avoid is to use fgets
to read the input as a string and then extract what you want using sscanf
as:
char line[MAX];
printf("
Enter any integer:");
if( fgets(line,MAX,stdin) && sscanf(line,"%d", &anint)!=1 )
anint=0;
printf("
Enter any character:");
if( fgets(line,MAX,stdin) && sscanf(line,"%c", &achar)!=1 )
achar=0;
Another way to consume the newline would be to scanf("%c%*c",&anint);
. The %*c
will read the newline from the buffer and discard it.
You might want to read this:
C FAQ : Why does everyone say not to use scanf?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…