关于scanf函数的问题
关于第13行,为什么输入7a8.8b9.9后面的8.8不会覆盖前面的7,而是和前面的7相加呢?#include <stdio.h>
#include <stdlib.h>
int main(void)
{
float a, b;
int c;
do
{
printf("请输入合法的数字:");
do
{
a += b;
c = scanf("%f", &b);
} while (getchar() != '\n' && c == 1);
} while (c == 1);
printf("结果是:%.2f\n", a);
system("pause");
return 0;
} 本帖最后由 1613551 于 2022-10-20 13:37 编辑
这是输出结果 本帖最后由 jackz007 于 2022-10-20 14:32 编辑
因为在每次 scanf() 读入新的 b 之前,都先执行了 a = a + b,就是说,b 已经被记录到 a 当中了,因此,不会被覆盖。
问题出在第 5 行,累加变量 a 和 b 没有进行初始化,改过后,代码就完美了。
float a = 0 , b = 0 ; // 累加前,a 和 b 必须初始化为 0 scanf获得浮点数,你打一个int整型,会被默认加上.0变为一个浮点值 jackz007 发表于 2022-10-20 14:01
因为在每次 scanf() 读入新的 b 之前,都先执行了 a = a + b,就是说,b 已经被记录到 a 当中了, ...
我以为scanf会一次性把7a8.8b9.9都传入到c里面,那么c就会是一个奇怪的值 也就是当前面仅有一个%的时候,scanf函数只会录入一个浮点数吗 本帖最后由 jackz007 于 2022-10-20 15:12 编辑
1613551 发表于 2022-10-20 15:03
也就是当前面仅有一个%的时候,scanf函数只会录入一个浮点数吗
是的,字符串里有一个"%f" ,同时,后面有一个 & b 与之相对应,每次就会只读取一个浮点数。
对于同一行输入的 7a8.8b9.9 而言,会分 3 次读取 3 个浮点数。scanf() 每次在读取到不属于浮点数的字符之前会自动停止,后面 while 语句中的 getchar() 会读取这个字符,下一次 scanf() 瞄准的又是一个新的浮点数。 啊这....挺神奇的 也许是的,遇到一个字符停止读入
页:
[1]