问题描述
scanf输入三个数,输出发现三个数都不一定输入正确!!!
#include<stdio.h>
main()
{
float x = 13.14;
int y = 132456;
short s = 1;
printf("请输入一个浮点型、整型、短整型数据,如13.14 1314 1\n\n");
scanf("%f %d %d", &x, &y, &s);
printf("%f,%d,%d\n", x, y, s);
}
输出中经常会有中间的y输入不正确,或者x末尾的小数不正确,最可怕的是三个数都不正确。如下所示
请输入一个浮点型、整型、短整型数据,如13.14 1314 1
-13.15 1234 3
-13.150000 0 3
尝试过的方法
在百度搜出来大部分结果是说缓冲区未清除。。于是找各种骚操作
- fflush
fflush(stdout); // 清空输出缓冲区
fflush(stdin); //清空输入缓冲区
- while +scanf
while( scanf("%f,%d,%d", &x, &y, &s) == 3){;} //因为scanf每正确输入一个数据就返回1,不正确输入就返回0.
- 自定义清除缓冲区 safe_flush(FILE *fp)
void safe_flush(FILE *fp)
{
int ch;
while( (ch = fgetc(fp)) != EOF && ch != '\n' );
}
***********
safe_flush(stdin);
scanf("%f %d %d", &x, &y, &s);
- getchar
while((x = getchar()) != '\n' && x != EOF);
while((y = getchar()) != '\n' && y != EOF);
while((s = getchar()) != '\n' && s != EOF);
正确姿势
scanf("%f %d %hd", &x, &y, &s);
printf("%f,%d,%hd\n", x, y, s);
数据类型 | 对应格式 |
---|---|
char | %c |
int | %d |
short | %hd |
long | %ld |
float | %f |
double | %lf |
string | %s |
参考
初次入坑,必有错误,欢迎留言拍砖
- https://zh.cppreference.com/w/c/io/fscanf
- http://www.cplusplus.com/reference/cstdio