Scanf плавает от стандартного ввода, отделенного символом "е" - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь получить от stdin два числа с плавающей точкой, разделенных символом "e" в C / C ++.

Ввод: 4.2e3

Когда я кодирую

#include <cstdio>

int main(){
 float a, b;

  scanf("%fe%f", &a, &b);
  printf("%f %f", a, b);
  return 0;
}

Я получаю 4200.000000 0.000000, но когда я изменяю символ "e" как на входе, так и в коде, тогда я получаю 4.200000 3.000000, что является ожидаемым результатом.

Я решаю эту проблему, используя строку, разбиение и приведение, но это очень нечисто для меня. Вот код, который я написал

#include <iostream>
#include <bits/stdc++.h>
#include <boost/algorithm/string.hpp>
#include <string>

using namespace std;

int main(){
    float a, b;
    string line;
    vector<string> numbers;

    cin >> line;
    boost::split(numbers, line, boost::is_any_of("e"));
    a = strtod(numbers[0].c_str(), 0);
    b = strtod(numbers[1].c_str(), 0);

    printf("%f %f", a, b);
    return 0;
}

Есть ли лучший способ решения этой проблемы, особенно более быстрый, благодаря чтению тысяч таких строк?

...