出的问题真的莫名其妙
{
float num = 0;
printf( "请输入一个小数:" );
scanf( "%f", &num );
printf( "你输入的值存储在浮点类型中后变成了:%f", num );
return 0;
}
浮点数里存的是个近似值。
这是很正常的,因为浮点数存储大小有限,存在尾数误差,而printf并不智能地判断float的有效位数,它会自以为是地一顿输出
不知道你这个问题是否已经解决, 如果还没有解决的话:接下来我们还是来看看scanf怎么使用的
实际上,scanf和printf函数一样是由格式串控制的,每次你调用的狮虎,scanf函数从左边开始处理字符串的信息,对于每一个格式串的说明,scanf都会去执行,另外说一下scanf函数的注意事项
1.scanf函数读取数据成功,会继续处理剩下的字符串。
2.scanf函数读取数据项,如果某一项读取不成功,那么就立即停止,不再继续往下读取数据。
3.另外在寻找数的起始位置时候,scanf会忽略空白字符串。(换行符,空格符。垂直制表符)
第三点就例如下图这种现象
这里是因为。scanf函数会把输入的字符,看成连续的字符流,而且scanf函数在寻找每个数的起始位置的时候,会跳过空白符。所以它能成功的读取这些数。
这里我会列出一些scanf格式化类型说明
类型 | 合格的输入 | 参数的类型 |
---|---|---|
%a、%A | 读入一个浮点值(仅 C99 有效)。 | float * |
%c | 单个字符:读取下一个字符。如果指定了一个不为 1 的宽度 width,函数会读取 width 个字符,并通过参数传递,把它们存储在数组中连续位置。在末尾不会追加空字符。 | char * |
%d | 十进制整数:数字前面的 + 或 - 号是可选的。 | int * |
%e、%E、%f、%F、%g、%G | 浮点数:包含了一个小数点、一个可选的前置符号 + 或 -、一个可选的后置字符 e 或 E,以及一个十进制数字。两个有效的实例 -732.103 和 7.12e4 | float * |
%i | 读入十进制,八进制,十六进制整数 。 | int * |
%o | 八进制整数。 | int * |
%s | 字符串。这将读取连续字符,直到遇到一个空格字符(空格字符可以是空白、换行和制表符)。 | char * |
%u | 无符号的十进制整数。 | unsigned int * |
%x、%X | 十六进制整数。 | int * |
%p | 读入一个指针 。 | |
%[] | 扫描字符集合 。 | |
%% | 读 % 符号。 |