使用scanf扫描浮点数和双精度数的最佳方法是什么?

Ash*_*sha 2 c

考虑这个例子:

float a;
double b;

scanf("%f%f", &a, &b);   // A
scanf("%Lf%Lf", &a, &b); // B
scanf("%f%Lf", &a, &b);  // C
scanf("%f%lf", &a, &b);  // D
Run Code Online (Sandbox Code Playgroud)

cha*_*987 12

您可以使用

scanf("%f %lf", &a, &b);
Run Code Online (Sandbox Code Playgroud)

scanf类型说明符:

  • c:单个字符:读取下一个字符.如果指定了不同于1的宽度,则该函数读取宽度字符并将它们存储在作为参数传递的数组的连续位置中.最后不附加空字符.
  • d:十进制整数:数字可选地以+或 - 符号开头.
  • e,E,f,g,G:浮点数:包含小数点的十进制数,可选地前面带有+或 - 符号,可选地包含e或E字符和十进制数字.有效条目的两个示例是-732.103和7.12e4
  • o:八进制整数.
  • s:字符串:这将读取后续字符,直到找到空格(空白字符被视为空白,换行符和制表符).
  • u:无符号十进制整数.
  • x,X:十六进制整数.

修饰符:

  • h:short int(对于d,i和n),或unsigned short int(对于o,u和x)
  • l:long int(对于d,i和n),或unsigned long int(对于o,u和x),或double(对于e,f和g)
  • L:长双(e,f和g)

资料来源:http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

  • @Asha:如果你认为这是正确的答案,你应该接受它.(帮自己一个忙,阅读[FAQ](http://stackoverflow.com/faq).这个地方运作得很好,因为它有一些规则.但是,这也意味着,当你不遵守规则,这个地方不适合你.) (3认同)