Программа читает слишком много десятичных чисел

Я пытаюсь прочитать 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.0, 54.7 а также -2, Я знаю, что могу указать, сколько десятичных знаков печатать с %.x, но мне нужно напечатать столько, сколько было дано мне на входе.

Кроме того, те while (true) есть петли, потому что я не знаю, сколько номеров я собираюсь получить.

1

Решение

То, что вы хотите, невозможно с простыми типами с плавающей точкой.
Если вы хотите напечатать числа с тем же количеством знаков после запятой, что и для ввода, вам необходимо:

  • Прочитайте ввод как строку.
  • Разберись сам и сохрани число десятичных знаков.
  • Используйте это при повторной печати.
6

Другие решения

Когда вы используете scanf("%d",...) он читает символы и разбирает их в int,

Если вы хотите показать их при вводе, вы должны сохранить их как строки.

И если вам нужно использовать их как double затем преобразовать их в числа.

1

По вопросам рекламы [email protected]