1.说明下列每对scanf格式串是否等价?如果不等价,请指出它们的差异。
(c) "%f"与"%f "。
在 `scanf` 函数中,`"%f"` 和 `"%f "` 这两种格式的区别在于后面的空格。
1. `scanf("%f", &variable);` 这种情况下,`scanf` 会读取并解析用户输入的浮点数,然后将解析的值存入 `variable` 中。一旦读取到非数字字符(例如空格,换行,制表符等),`scanf` 就会停止读取。
2. `scanf("%f ", &variable);` 这种情况下,`scanf` 在解析并存储浮点数之后,还会继续读取并忽略掉后面的任何空白字符(包括空格,换行和制表符)。也就是说,`scanf` 将会读取直到下一个非空白字符为止。
简单地说,`"%f"` 读取一个浮点数,然后停在后面的第一个非数字字符上,而 `"%f "` 读取一个浮点数,并且会跳过其后的所有空白字符,直到遇到下一个非空白字符。
假设我们有下面这样的输入:`12.34 56.78`
如果你的代码如下:
float a, b; scanf("%f", &a); scanf("%f", &b);
`scanf("%f", &a);` 会读取 `12.34`,然后停止在空格处,因为空格是非数字字符。然后,`scanf("%f", &b);` 会从空格后的 `56.78` 开始读取,因此,`a` 将得到 `12.34`,`b` 将得到 `56.78`。
然而,如果你的代码是这样的:
float a, b; scanf("%f ", &a); scanf("%f", &b);
`scanf("%f ", &a);` 会读取 `12.34`,然后继续读取并忽略后面的空格,停在 `56.78` 的前面。然后,`scanf("%f", &b);` 将从 `56.78` 开始读取。所以,结果仍然是 `a` 得到 `12.34`,`b` 得到 `56.78`。
区别在于,如果你在 `"%f "` 后面还想继续读取空白字符或者做其他的 `scanf` 操作,可能就会出现预料之外的结果,因为 `"%f "` 会跳过浮点数后面的所有空白字符。
标签:字符,语言,值得注意,scanf,知识,空格,56.78,浮点数,读取 From: https://www.cnblogs.com/xuenima/p/17447013.html