Преобразование текстового файла в бинарный: дробное число неправильно переводится - 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)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы