-0x1.e51b67p+0
gobble-de-gook - это вывод std::hexfloat
, дополнения к стандартной библиотеке C ++ в стандартной редакции C ++ 11.
Если вы замените
while(ifs >> std::hex >> a
>> std::hex >> b
>> std::hex >> c
>> std::hex >> d)
с
while(ifs >> std::hexfloat >> a
>> std::hexfloat >> b
>> std::hexfloat >> c
>> std::hexfloat >> d)
, и ваш компилятор поддерживает C ++ 11 и hexfloat
(в этом G ++ немного запаздывает), вам следует идти вперед.
Edit: G ++ был медленным, включая std::hexfloat
в заголовках.К сожалению, на сегодняшний день, GCC 8.2, поддержка std::hexfloat
является неполной и не работает.Этот ответ не работает для Аскера.
Правка 2: Я заслуживаю того, чтобы упасть на свой меч для этого, но, к счастью, у меня нет меча.В моем навязчивом изучении того, почему это не работает в C ++, и в попытке найти вежливый способ заставить это работать в C ++, я полностью забыл тот факт, что это прекрасно работает в C.
С std::hexfloat
задерживается, пока разобраны формулировки стандарта C ++, давайте следовать Git-R Готово!В принципе, используйте C и оберните его в функцию, чтобы потом ее можно было легко заменить на идиоматический C ++.
#include <cstdio>
#include <iostream>
int main()
{
float a, b, c, d;
FILE *f = fopen("data.txt", "r");
if (f == NULL)
{
std::cerr << "Unable to open file."
return -1;
}
int n = 0;
while(fscanf(f, "%a %a %a %a", &a, &b, &c, &d) == 4)
{
std::cout << a << " "
<< b << " "
<< c << " "
<< d << std::endl;
++n;
}
std::cout << "n=" << n << std::endl;
return 0;
}