Блог пользователя KrK

Автор KrK, 13 лет назад, По-английски

Having used cin/cout streams all the time, I decided to learn scanf. Now I have some problems with reading long double. I use Dev-cpp.

There is a part of my program:
...
typedef long double ld;
...
pair <ld, ld> c[Maxn];
...
scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%Lf %Lf", &c[i].first, &c[i].second);
cout << c[0].first << " " << c[0].second << endl;
...

My input:
3
-5 9
0 1
5 -1

Output:
0 0

So no long doubles are read. I tried to replace "Lf" with "Le", "LE", "Lg", "LG", "e", "E", "f", "g", "G", "le", "lE", "lf", "lg", "lG". None of them seems to be working. Where is the problem?

  • Проголосовать: нравится
  • +5
  • Проголосовать: не нравится

»
13 лет назад, # |
Rev. 4   Проголосовать: нравится 0 Проголосовать: не нравится
It's better to read/output data in double (not long double), e.g.:

        long double r = 1.234567890123456;
        printf("%.10lf", double(r));

There is a same topic: http://codeforces.net/blog/entry/2071
»
13 лет назад, # |
  Проголосовать: нравится -21 Проголосовать: не нравится
%f - float
%lf - double
%llf - long double
»
13 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится
Haven't used dev-cpp for a long time. It uses mingw - the crippled port of gcc for windows OS. Read here more about this particular problem.
»
13 лет назад, # |
  Проголосовать: нравится +9 Проголосовать: не нравится
A workaround is to read into a double variable and then cast it to long double.
Usually it is sufficient to read input as doubles.
The same goes for output.