Некорректное считывание данных из файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

заметил ошибку: из файла считываются настройки, считываются 2 времени, перевожу их в миллисекунды, всё работает, НО! если время 1 задать как 23:00:00,000 время 2 задать как 23:00:55,000 то время 2 он начинает считать меньше чем 1. если например задать так: время 1 задать как 23:00:00,000 время 2 задать как 23:00:10,000 то всё работает нормально.... Fri Dec 17 14:42:24 2010 tim1 = 23:00:00,000 tim2 = 23:00:55,000 dat1 = 15.11.2009 dat2 = 12.09.2010 step = 1000 tim1>tim2 all1=82800000, all2=82789464 hour1=23, min1=0, sec1=0, msec1=0 hour2=23, min2=0, sec2=55, msec2=0 Fri Dec 17 14:42:44 2010 tim1 = 23:00:00,000 tim2 = 23:00:15,000 dat1 = 15.11.2009 dat2 = 12.09.2010 step = 1000 OK
                /////////////////////////
#include <stdio.h>          //nastr.cfg:           //
#include <conio.h>          //dat1 = 12.12.2010    //
#include <iostream.h>       //dat2 = 13.12.2010    //
#include <stdlib.h>         //tim1 = 12:15:18,001  //
#include <time.h>           //tim2 = 15:12:22,101  //
#include <string.h>     //step = 1000          //
                /////////////////////////
typedef struct{
    int dni;
    unsigned long int msec;
    char randarr[512];
} REZ_BIN;
 
int N=5; //kol-vo nastroek v nastr.cfg
 
int main()
{
     FILE *fp;
     int day1, month1, year1;
     int day2, month2, year2;
     int hour1, min1, sec1, msec1;
     int hour2, min2, sec2, msec2;
     unsigned long int all1, all2;
     int step;

FILE *fpLOG;
fpLOG=fopen("../log/log.txt", "ab");

const time_t timer=time(NULL);
fprintf(fpLOG,"\n%s", ctime(&timer));

    if((fp=fopen("../etc/nastr.cfg", "r")) == NULL)
    {
      printf("net faila c nastroikami \n");
      fprintf (fpLOG,"net faila c nastroikami \n");
      return(1);
    }

char nastr[5]; /////N
 
int z;

for (z=1; z<=N; z++)
{

   fscanf(fp, "%4s", &nastr);
 
int m=0;
   if (!strcmp(nastr,"dat1"))
   m=1;
   if (!strcmp(nastr,"dat2"))
   m=2;
   if (!strcmp(nastr,"tim1"))
   m=3;
   if (!strcmp(nastr,"tim2"))
   m=4;
   if (!strcmp(nastr,"step"))
   m=5;

 switch (m)
 
   {
   case 1:
     fscanf(fp, " = %2d.%2d.%4d""\n", &day1, &month1, &year1);
     fprintf(fpLOG,"dat1 = %02d.%02d.%04d  ", day1, month1, year1);
     break;
 
   case 2:
     fscanf(fp, " = %2d.%2d.%4d""\n", &day2, &month2, &year2);
     fprintf(fpLOG,"dat2 = %02d.%02d.%04d  ", day2, month2, year2);
     break;

   case 3:
     fscanf(fp, " = %2d:%2d:%2d,%3d""\n", &hour1, &min1, &sec1, &msec1);
     fprintf(fpLOG,"tim1 = %02d:%02d:%02d,%03d  ", hour1, min1, sec1, msec1);
     break;

   case 4:
     fscanf(fp, " = %2d:%2d:%2d,%3d""\n", &hour2, &min2, &sec2, &msec2);
     fprintf(fpLOG,"tim2 = %02d:%02d:%02d,%03d  ", hour2, min2, sec2, msec2);
     break;

   case 5:
     fscanf(fp, " = %d\n", &step);
     fprintf(fpLOG,"step = %d  ", step);
     break;
 
  }//end switch
}//for

//---------------------------------------------------------------------------
int flag=0;
 
if (day1>31)
    {
 
    fprintf(fpLOG,"ne verniy format dat1. (XX.xx.xxxx) ");
    printf("ne verniy format dat1. (XX.xx.xxxx)\n");
    flag=1;}
 
if (month1>12)
    {
    fprintf(fpLOG,"ne verniy format dat1. (xx.XX.xxxx) ");
    printf("ne verniy format dat1. (xx.XX.xxxx)\n");
    flag=1;}
 
if (day2>31)
    {
 
    fprintf(fpLOG,"ne verniy format dat2. (XX.xx.xxxx) ");
    printf("ne verniy format dat2. (XX.xx.xxxx)\n");
    flag=1;}
 
if (month2>12)
    {
 
    fprintf(fpLOG,"ne verniy format dat2. (xx.XX.xxxx) ");
    printf("ne verniy format dat2. (xx.XX.xxxx)\n");
    flag=1;}
 
if (hour1>23)
    {
 
    fprintf(fpLOG,"ne verniy format tim1. (XX:xx:xx,xxx) ");
    printf("ne verniy format tim1. (XX:xx:xx,xxx)\n");
    flag=1;}
 
if (min1>59)
    {
 
    fprintf(fpLOG,"ne verniy format tim1. (xx:XX:xx,xxx) ");
    printf("ne verniy format tim1. (xx:XX:xx,xxx)\n");
    flag=1;}
 
if (sec1>59)
    {
 
    fprintf(fpLOG,"ne verniy format tim1. (xx:xx:XX,xxx) ");
    printf("ne verniy format tim1. (xx:xx:XX,xxx)\n");
    flag=1;}
 
if (msec1>999)
    {
 
    fprintf(fpLOG,"ne verniy format tim1. (xx:xx:xx,XXX) ");
    printf("ne verniy format tim1. (xx:xx:xx,XXX)\n");
    flag=1;}
 
if (hour2>23)
    {
    ;
    fprintf(fpLOG,"ne verniy format tim2. (XX:xx:xx,xxx) ");
    printf("ne verniy format tim2. (XX:xx:xx,xxx)\n");
    flag=1;}
 
if (min2>59)
    {
 
    fprintf(fpLOG,"ne verniy format tim2. (xx:XX:xx,xxx) ");
    printf("ne verniy format tim2. (xx:XX:xx,xxx)\n");
    flag=1;}
 
if (sec2>59)
    {
 
    fprintf(fpLOG,"ne verniy format tim2. (xx:xx:XX,xxx) ");
    printf("ne verniy format tim2. (xx:xx:XX,xxx)\n");
    flag=1;}
 
if (msec2>999)
    {
 
    fprintf(fpLOG,"ne verniy format tim2. (xx:xx:xx,XXX) ");
    printf("ne verniy format tim2. (xx:xx:xx,XXX)\n");
    flag=1;}
 
if (flag==1)
      {
      return(1);
      }
//---------------------------------------------------------------------------
    fclose(fp);

all1 = (sec1*1000+min1*60000+hour1*3600000+msec1);
all2 = (sec2*1000+min2*60000+hour2*3600000+msec2);

if (all1>all2)
{
 
fprintf(fpLOG,"tim1>tim2 ");
fprintf(fpLOG,"all1=%lu, all2=%lu ",all1,all2);
fprintf(fpLOG,"\nhour1=%d, min1=%d, sec1=%d, msec1=%d",hour1,min1,sec1,msec1);
fprintf(fpLOG,"\nhour2=%d, min2=%d, sec2=%d, msec2=%d",hour2,min2,sec2,msec2);
printf("tim1>tim2");
 return(1);}
//---------------------------------------------------------------------------
и ещё вопрос. нужно сделать так, чтобы настройки в файле были в рандомной последовательности. я сделал, но с условием, что имя настройки содержит 4 символа.... что совсем не есть хорошо, как сделать грамотней?

Решение задачи: «Некорректное считывание данных из файла»

textual
Листинг программы
fprintf(fpLOG,"all1=%lu, all2=%lu",all1,all2);

Объяснение кода листинга программы

  1. all1 и all2 - это названия переменных.
  2. fpLOG - это дескриптор файла, который используется для записи данных в файл.
  3. Функция fprintf используется для записи данных в файл.
  4. lu - это спецификатор формата, который используется для вывода значений типа unsigned long int.
  5. all1 и all2 - это значения переменных, которые считываются из файла.
  6. Функция fprintf принимает три аргумента: дескриптор файла, строку формата и список аргументов.
  7. В данном случае, строка формата отсутствует, а вместо этого используются спецификаторы формата lu.
  8. Функция fprintf записывает значения переменных all1 и all2 в файл, после чего закрывает его.

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


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

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

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