问题
I dont understand where I went wrong. It does not read at second scanf()
just skips on to the next line.
#include <stdio.h>
#define PI 3.14
int main()
{
int y='y', choice,radius;
char read_y;
float area, circum;
do_again:
printf("Enter the radius for the circle to calculate area and circumfrence \n");
scanf("%d",&radius);
area = (float)radius*(float)radius*PI;
circum = 2*(float)radius*PI;
printf("The radius of the circle is %d for which the area is %8.4f and circumfrence is %8.4f \n", radius, area, circum);
printf("Please enter 'y' if you want to do another calculation\n");
scanf ("%c",&read_y);
choice=read_y;
if (choice==y)
goto do_again;
else
printf("good bye");
return 0;
}
回答1:
Your first scanf() leaves a newline in the input stream which is consumed by the next scanf() when you read a char.
Change
scanf ("%c",&read_y);
to
scanf (" %c",&read_y); // Notice the whitespace
which will ignore all whitespaces.
In general, avoid scanf() for reading inputs (especially when mixing different formats as do here). Instead use fgets() and parse it using sscanf().
回答2:
you can do this:
#include <stdlib.h>
#define PI 3.14
void clear_buffer( void );
int main()
{
int y='y',choice,radius;
char read_y;
float area, circum;
do_again:
printf("Enter the radius for the circle to calculate area and circumfrence \n");
scanf("%d",&radius);
area = (float)radius*(float)radius*PI;
circum = 2*(float)radius*PI;
printf("The radius of the circle is %d for which the area is %8.4f and circumfrence is %8.4f \n", radius, area, circum);
printf("Please enter 'y' if you want to do another calculation\n");
clear_buffer();
scanf("%c",&read_y);
choice=read_y;
if ( choice==y )
goto do_again;
else
printf("good bye\n");
return 0;
}
void clear_buffer( void )
{
int ch;
while( ( ch = getchar() ) != '\n' && ch != EOF );
}
or you can write fflush(Stdin) before scanf
来源:https://stackoverflow.com/questions/17185187/program-wont-read-at-second-scanf