Trouble with input using scanf()

2019-09-06 09:05发布

问题:

I'm new to C so I'm having a bit of trouble with scanf().

#include <stdio.h>
#include <stdlib.h>

int main()
{
int height;
int weight;

printf("Enter height in inches:\n");
scanf("%d", &height);

printf("Enter weight in pounds:\n");
scanf("%d", &weight);

printf("You are %d inches tall and weigh %d pounds.", height, weight);

return 0;
}

I'm pretty sure this is the correct syntax but when I run it, it shows an empty screen and after I input 2 numbers it shows:

64

120

Enter height in inches:

Enter weight in pounds:

You are 64 inches tall and weigh 120 pounds.

According to some tutorials, it's supposed to display "Enter height in inches:" before I input the 1st number and "Enter weight in pounds:" before I input the 2nd number. Please help me!

I'm using Eclipse to write my programs and MinGW as the compiler if that's relevant.

回答1:

Its a bug in eclipse and this has been reported by most of the people using eclipse and MinGW.

To overcome this problem, you could use fflush(stdout) after every call to printf or use the following in the start of main :

setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);

This will cause stdout and stderr to flush immediately whenever it is written to.



回答2:

Try using scanf_s instead of scanf , i just ran it and it worked.



回答3:

I would suggest you to user sscanf insted of scanf and add fgets to the top would be more logic.

It would be:

int height;
char buffer[32]; /*Add this to collect you data*/

printf("Enter height in inches:\n");
fgets(buffer,sizeof(buffer),stdin); /*Add this line to get value from keyboard*/
sscanf(buffer,"%d", &height); /*Change scanf to sscanf*/

and same of the other one



回答4:

I suggest usying Putty if on Windows or command line on Mac OSX. Use "Wal Werror" compiler

Yes, you need to wait for it to display the output before enterning number.

E.g. you run the program When this line appears

Enter height in inches:

then enter

 64

then when this appears

Enter weight in pounds:

Then enter

 120

then output should be as expected



标签: c scanf