程序读取太多十进制的情况

时间:2013-03-03 16:18:49

标签: c++ floating-point stdio

我正在尝试阅读3个花车。我尝试使用浮点数和双精度数执行此操作,但我对两者都有相同的行为。

输入示例:

3 1 2
32.0 54.7 -2

第一行有3个整数,第二行有3个浮点数:

我如何阅读:

vector<int> order;
vector<double> numbers;
unsigned int order_number;
double number;
char input_character;

while (true)
{
  scanf("%d", &order_number);
  order.push_back(order_number);

  scanf("%c", &input_character);

  if (input_character == ' ')
    continue;
  else
    break;
}

while (true)
{
  scanf("%lf", &number);
  numbers.push_back(number);

  scanf("%c", &input_character);

  if (input_character == ' ')
    continue;
  else
    break;
}

printf("%d %d %d\n", order[0], order[1], order[2]);
printf("%lf %lf %lf\n", numbers[0], numbers[1], numbers[2]);

打印时,我得到:

32.000000 54.700000 -2.000000

我只想32.054.7-2。我知道我可以使用%.x指定要打印的小数位数,但我需要打印输入中给出的数量。

此外,那些while (true)循环在那里,因为我不知道我将获得多少数字。

2 个答案:

答案 0 :(得分:6)

使用纯浮点类型无法实现所需。 如果要打印与输入具有相同小数位数的数字,则必须:

  • 以字符串形式阅读输入。
  • 自己解析并保存小数位数。
  • 再次打印时使用它。

答案 1 :(得分:1)

当您使用scanf("%d",...)时,它会读取字符并将其解析为int

如果你想在输入时显示它们,你必须将它们存储为字符串。

如果您需要将它们用作double,请将它们转换为数字。