file — конвертирует float в массив char с помощью atof Stack Overflow

Я искал похожие проблемы, но все еще не могу найти решение своей проблемы.

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

void makefile( ifstream & fi, ofstream & fo ){
struct{
int acct;
char name[25];
float dolr;
} x;

int i;
char line[81], *p, *q;

while ( fi.getline( line, 81 ) ) {
x.acct = atoi( line );
p = line;
while ( *p++ != ' ' );
for ( q = x.name, i = 24 ; i-- ; ){
*q++ = *p++;                    // *q = '\0';
}
while ( *--q == ' ' );              // find end of string

*++q = '\0';                        // mark end of name string
x.dolr = atof(p);
fo.write( (char*)&x, sizeof(x) );
}
}

Входной текстовый файл выглядит следующим образом …

000027183 Hun, Attila The       1234.56
000012345 Dooright, Dudley      211.22
000031416 Whiplash, Snidely     1200.00
000014142 Jekyll, Doctor        1500.00
000031623 Hyde, Mister          1500.00
000010203 Bear, Smokey The      2000.00
000020103 Dumpty, Humpty        3000.00
000030102 Woman, Wonder         3824.36
000030201 Hulnk, Incredible     9646.75
000022345 Snowman, Abominable   2496.24

Когда я запускаю программу и проверяю двоичный файл (используя отдельную программу), я вижу преобразованный файл, но он выглядит так:

 27183  Hun, Attila The         1234.56         0.00
12345  Dooright, Dudley        211.22         0.00
31416  Whiplash, Snidely       1200.0        0.00
14142  Jekyll, Doctor          1500.00          0.00
31623  Hyde, Mister                1500.00           0.00
10203  Bear, Smokey The        2000.00        0.00
20103  Dumpty, Humpty          3000.00          0.00
30102  Woman, Wonder               3824.36          0.00
30201  Hulnk, Incredible       9646.7        5.00
22345  Snowman, Abominable     2496        0.24

Первоначально это было написано на C, и я начинаю задумываться, отражается ли это в коде, который мой профессор дал нам для создания двоичного файла. Какие-либо предложения?

Обновление: это функция в другой программе, которая читает файл, чтобы «проверить его»

void
chkfile( ifstream & f ){

struct {
int acct;
char name[25];
float dolr;
} x;while ( f.read( (char *)&x, sizeof(x) ) ){
cout << setfill('0') << setw(9) << x.acct << "  ";
cout.setf( ios::left, ios::adjustfield );
cout << setfill(' ') << setw(26) << x.name;
cout.setf( ios::right, ios::adjustfield );
cout.setf( ios::fixed, ios::floatfield );
cout.setf( ios::showpoint );
cout.precision(2);
cout << setw(10) << x.dolr << '\n';
}
}

0

Решение

ОБНОВЛЕНИЕ: Оказывается, проблема была не в коде, а в текстовом файле, используемом для создания двоичного файла. Я использовал вкладки для пробелов между именами и суммами, чтобы при преобразовании в двоичный файл синтаксический анализ был отключен. Я использовал пробелы, и это решило мою проблему!

0

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


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