Преобразование текстового файла в бинарный: дробное число неправильно переводится - C (СИ)
Формулировка задачи:
Здравствуйте. Мой текстовый файл состоит из строк последнее слово которых - дробное число. При запуске ключ -f значит распечатать содержимое полученного бинарного файла. Числа вида 456.0 переводятся нормально, а вот 0.44 переводится в 0.00000000. Плюс ко всему почему то в 79 строке никак не реагирует на ключ -f, то есть flag_f остается равным нулю, хотя при отладке argv[2] = "-f". Помогите пожалуйста найти ошибку.
#include <stdio.h>
#include "functions.h"
#include "point.h"
void usage()
{
printf("Usage: program <input txt file> <output binary file> [-f] \n");
}
int zero(char *filename) {
FILE *f1=fopen(filename, "wb");
fclose(f1);
}
int print(char* filename) {
country s1;
FILE *f1=fopen(filename, "rb");
if (f1==NULL) {
return 1; //ошибка чтения файла
}
while (!feof(f1)) {
if (fread(&s1, sizeof(country),1,f1))
printf("%s %d %s %f\n",s1.name, s1.population, s1.capital, s1.space);
}
fclose(f1);
return 0;
}
int TxtToBin(char* txtfilename, char* binfilename)
{
FILE *in;
country c;
int s=sizeof(c);
char mystring[100];
if ((in=fopen(txtfilename, "r")) != NULL)
{
while (!feof(in)) {
if (fgets(mystring, 100, in) != NULL ) {
char* pch = strtok (mystring," ");
int i=0;
while (pch != NULL)
{
switch(i)
{
case 0: strcpy(c.name,pch); break;
case 1: c.population = atoi(pch); break;
case 2: strcpy(c.capital,pch); break;
case 3: c.space = atoi(pch); break;
}
pch = strtok (NULL, " ");
i++;
}
int result;
if (result = append(binfilename, c)) return result;
}
}
fclose(in);
}
else return 3;//ошибка открытия текстового файла
return 0;
}
int main(int argc, char* argv[])
{
int flag_f=0;
char* binfilename;
char* txtfilename;
if (argc < 3) {
usage();
return 1;
}
else {
txtfilename = argv[1];
binfilename = argv[2];
int i;
for (i = 3; i < argc; i++) {
if (argv[i] == "-f") flag_f=1;
}
}
zero(binfilename);
int result = TxtToBin(txtfilename, binfilename);
//обработка возможных ошибок (1,2,3)
if (flag_f)
{
int result = print(binfilename);
//обработка ошибки
}
return 0;
}Решение задачи: «Преобразование текстового файла в бинарный: дробное число неправильно переводится»
textual
Листинг программы
c.space = atoi(pch)