Double扫描不正确

时间:2019-12-19 19:19:22

标签: c scanf

#include <stdio.h>

int main() {
  double a;
  char b[32];
  scanf("%31[^,] %lf", b, &a);
  printf("%s, %lf", b, a);
  return 0;
}

字符串b已正确存储,但变量a未正确存储。我怎么了?

1 个答案:

答案 0 :(得分:2)

更改此:

scanf("%31[^,] %lf", b, &a);

对此:

scanf("%31[^,], %lf", b, &a);

因为格式%31[^,]会读取直到逗号,但已注释,不会读取逗号本身。因此,您需要添加一个逗号。

这也解释了为什么b会按预期填充,因为它是第一个要填充的变量。问题在逗号后开始,这说明了为什么“ a变量未正确存储”。

正如@pmg所评论的那样,您应该检查一下匹配数,在您的情况下为2。使用您的代码,您将从该方法中获得非预期的返回值,并意识到格式存在问题。示例:

if (scanf("%31[^,], %lf", b, &a) != 2)
  /* error */;