scanf和错误的输入会使输出变得更加奇怪
我在C中有以下代码:
#include <stdio.h>
#include <stdlib.h>
int var();
int var()
{
return 10;
}
void main()
{
int a;
double x;
a=0;
a=var();
printf("hello world, i am a function which returned the value %d",a);
printf("nnow you enter a value:");
scanf("%d",&a);
printf("so you entered the value: %d",a);
printf("nnow enter a double value:");
scanf("%lf",&x);
printf("The double number till 4 precision is: %0.4lf",x);
}
当我输入两个scanf的正常整数和双值时,它运行良好。 不过,我想让它更强大。 如果我为int scanf输入一个十进制值,代码将直接跳转到下一个printf并跳过scanf进行double操作。 它将int输入的小数部分打印为double值。
例如:
hello world,我是一个返回值10的函数
现在你输入一个值:44.67
所以你输入了值:44
现在输入一个双精度值:直到4精度的双精度为:0.6700
任何帮助?
这很棘手,因为带分数的数字(如12.34
)确实有一个有效的整数部分,它被第一次scanf
调用读取并正确解析。
最简单的解决方案是使用例如fgets
将输入读入缓冲区,然后在该缓冲区上使用sscanf
。
您应该使用函数fpurge()
来擦除在给定流中缓存的任何输入或输出(在本例中为stdin
)。 尝试这个:
#include <stdio.h>
#include <stdlib.h>
int var();
int main(int argc, char *argv[]) {
int a;
double x;
a = 0;
a = var();
printf("Hello world, I am a function which returned the value %d.n", a);
printf("Now you enter a value: ");
scanf("%d", &a);
printf("So, you entered the value %d.n", a);
printf("Now enter a double value: ");
fpurge(stdin);
scanf("%lf", &x);
printf("The double number till 4 precision is %.4lf.n", x);
return 0;
} // End main
int var() {
return 10;
}
这是我得到的输出:
你好世界,我是一个返回值10的函数。
现在输入一个值:44.67
所以,你输入了44的值。
现在输入一个双精度值:3.14159
双精度到4精度为3.1416。