Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с переписыванием проги с С++ на С 
V
    Опции темы
Avreol
Дата 29.5.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 14.4.2008
Где: Новосибирск

Репутация: нет
Всего: нет



Надо переписать прогу с С++ на С.

Код

#include <stdio.h>

struct h_tree {
    unsigned char c;
    int count;
    struct h_tree *left,*right;
};

void h_tree_unpack(FILE *f,int l,int N,bool *code,struct h_tree *root) 
{
  static int i=0;
  int j=0;
  static int k=0;
  static struct h_tree *t=root;
  if(t==NULL) t=root;
  for(j=0;j<8;j++) 
  {
     if(t==NULL) t=root;
      // printf("%d %d\n",j,t->count);
      if ((code==NULL)||(i==N)||(k>l)) 
        {
            t=NULL;
            i=0;
            k=0;
            return;
        } 
      if (t->left==NULL) { 
          if(i>=N) { 
              i=0;
              t=root;
              return;
          }
          fprintf(f,"%c",t->c);
          t=root;
          i++;
      } 
      if (code[j]==0) t=t->left;  
      if (code[j]==1) t=t->right; 
      k++;
  }
}


При компиляции вылазят вот такие ошибки:

main.c:9: error: parse error before 'bool'
main.c:14: error: 'root' undeclared (first use in this function)

Подскажите пожалуйста, какие есть пути разрешения этой проблемы.. Может библиотеки какие нужно подключить..
PM MAIL WWW ICQ   Вверх
ama_kid
Дата 29.5.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 2
Всего: 95



Цитата(Avreol @  29.5.2008,  19:45 Найти цитируемый пост)
какие есть пути разрешения этой проблемы

Код
...
// В начале
typedef unsigned short int bool;  // bool - нет такого типа в С.
...
  static struct h_tree *t;  // неконстанта не может инициализировать static-переменную в объявлении
  t=root;
...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
mes
Дата 29.5.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



добавь #include <stdbool.h>

и здесь ошибка:
Цитата(Avreol @  29.5.2008,  19:45 Найти цитируемый пост)
static struct h_tree *t=root;

static struct h_tree *t=NULL;

Добавлено через 41 секунду
оп..опоздал...


--------------------
PM MAIL WWW   Вверх
Avreol
Дата 30.5.2008, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 14.4.2008
Где: Новосибирск

Репутация: нет
Всего: нет



После добавления #include <stdbool.h> в строке
Код

typedef unsigned short int bool;

вылазит вот такая ошибка:
main.c:6: error: two or more data types in declaration specifiers

и еще вопрос:
После всех изменений перестала работать деархивация(точнее работает, но криво), вот собственно код:

Код

if(argv[2]) { 
       if(f=fopen(argv[2],"rb")) ; else 
   { 
       printf("Error file not found\n");
       return -1;
   } 
   } else 
   { 
       printf("Error no filename given\n");
       return -2;
   }
   fscanf(f,"%d",&y);
   for(k=0;k<y;k++) 
   {
    if ((fscanf(f,"%s",f_name))==1); else break;
    fscanf(f,"%d",&N);
    fscanf(f,"%d",&l);
    //g=(bool *)realloc(g,l*sizeof(bool));
    //printf("%d\n",l);
    //printf("%d\n",sizeof(g));
    for(i=0;i<256;i++) u[i]=0;
    for(i=0;i<N;i++){
       fscanf(f," %d ",&j);
       fscanf(f,"%d ",&u[j]);
      // printf("%d %d\n",k,u[k]);
    }
    //for(i=0;i<256;i++) printf ("a[%d] - %d,u[%d] - %d\n",i,a[i],i,u[i]);
    //fclose(f);
    int t,e=0;
    if (argv[3]) e=1;
    for(t=3;t<argc;t++) if (strcmp(f_name,argv[t])==0) e=0;
    if(((f2=fopen(f_name,"r"))&&(argv[1][0]=='+'))||(e)) fseek(f,l/8+1,SEEK_CUR); else 
    {
        root=(struct h_tree **)malloc(N*sizeof(struct h_tree));
        h_tree_generate(N,u,root);
        f2=fopen(f_name,"wb");
        i= buffered_input(f,f2,g,l,get_lenght(u),root[0]);
        fclose(f2);
        printf("Reading completed.");
        printf("\n");
        //h_tree_unpack(f2,i,get_lenght(u),g,root[0]);
        printf("Extracting completed.");
        printf("\n"); 
    }
   }
    fclose(f);


Что здесь исправить чтобы все стало на свои места?

ЗЫ прошу прощения за явно тупые вопросы...
 smile 

PM MAIL WWW ICQ   Вверх
bronislav
Дата 30.5.2008, 06:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: нет
Всего: 3



Цитата(Avreol @  30.5.2008,  04:53 Найти цитируемый пост)
После добавления #include <stdbool.h> в строке вылазит вот такая ошибка:
Код

main.c:6: error: two or more data types in declaration specifiers

Тебе надо было или подключать stdbool.h или объявлять тип самостоятельно. Выбери что-то одно. 


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Avreol
Дата 30.5.2008, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 14.4.2008
Где: Новосибирск

Репутация: нет
Всего: нет



ясно) это я понял)) а вот что с деархивацией делать?

до:
Код

int getfilesize(FILE *f)
{
    int i=0;
    fpos_t pos;
    fseek(f,0,SEEK_END);
    fgetpos(f,&pos);
    i=pos;
    fseek(f,0,0);
    return i;
}


после:
Код

\\\x4cpx040xx\4t100\7\6\00t12\67\\4u604f4\t6ft0xt\7xr7r0x1x4r48\40;n\0\x
45o\\37e20\40\lat i05869l;x\720\4x\\fex205xcuio2\0\1f8rx0x2\69l;x\74\t084e29xe2x0\x0\4\\82\0ta2ti32    
x\t\20040nt 91nt xto\t\\4t6\n0t\t08\20t8utx\x02tx00408\\n0\\00\\xt033\2xxttx6208uo\t0x22\a02x2\a2o\t0202x038\t\0\\06
39\22xx\2tx0\2x12xx0\t000t00120\2tx0042\a\2\
x02tx00t2\a\9\2tx00402x0f2xet2\a\\ttx04\2tx0\tra\otx006\t00    
408\\to\t00\18\\e\t0;\08o62\a\0000\\x2\0;00t0325232r0\\880\\0003242\a2te2\a\x40\\e\ra\60;o\t0;f\2x7t42x82\0;3208
x0385400026337\2txtx0\0\\0\0o2\a02\a0\\0\t000\\0\t2x08\t0tl40050\t0tx\32x;184\4384\4\;
07t07n0\\0\608f2xlt2\auxttx62x000340\tx7723420\\o;2x318\38\\23462\a91ra960\\40x0o2x70\t6\\t003\2c\94\tt\p9c
a2t\eatrx5xt02\\\\\7\\t40x;a04xtt8l02 et\f2 g5f0 \4i4\x2t6t49;st00\\38   
\7\ix9c\ 12x\\4 2\0x\xtt\\400te8x;xt8fl0ftc 0xc\4tt04t6;\0\3ttxta0xtut000
t212\\\0\  x\si8tt\79r70\54f4\e5f 0
t4x\\ 2g9\x9c\ 12\t\66

 smile 
PM MAIL WWW ICQ   Вверх
mes
Дата 30.5.2008, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Avreol @  30.5.2008,  06:44 Найти цитируемый пост)
 вот что с деархивацией делать?
до: ...
после:..

С чем , чем ? что ты имеешь ввиду ??  smile 
до - это когда ??  smile 
и после чего ??  smile 

ну и вопрос!!!  smile  



--------------------
PM MAIL WWW   Вверх
Avreol
Дата 30.5.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 14.4.2008
Где: Новосибирск

Репутация: нет
Всего: нет



блин)) простите)

до - это просто файл какой был))
после - это после архивации и разархивации)))))

причем архивирует правильно) я проверял)
PM MAIL WWW ICQ   Вверх
mes
Дата 30.5.2008, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Avreol @  30.5.2008,  09:18 Найти цитируемый пост)
блин)) простите)

до - это просто файл какой был))
после - это после архивации и разархивации)))))
причем архивирует правильно) я проверял) 


простите, но какое отношение имеет архивация к C++ и к телу вашей проги?   smile 
еше раз простите но я никак не пойму чем Вы архивируете, с какой целью, каким образом и ведет ли в других случаях себя архиватор нормально?  smile 

 smile 


--------------------
PM MAIL WWW   Вверх
Avreol
Дата 30.5.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 14.4.2008
Где: Новосибирск

Репутация: нет
Всего: нет



все было так:
у меня был нормально работающий архиватор Хаффмана написанный на С++) поменяв разрешение с 'срр' на 'с' прога перестала компилиться)) что собственно вполне логично))) внеся все вышеизложенные изменения в код программы она скомпилилась, но работает некорректно, а именно разархивация)) (код который и отвечает за разархивацию изложен выше) вот я и спрашиваю что еще поправить в нем чтобы все встало на свои места) smile 
PM MAIL WWW ICQ   Вверх
ama_kid
Дата 30.5.2008, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 2
Всего: 95



Avreol, выложи полный изначальный работоспособный код на С++, посмотрим что да как...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Avreol
Дата 30.5.2008, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 14.4.2008
Где: Новосибирск

Репутация: нет
Всего: нет



аргумент +h для справки
Код

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct h_tree {
    unsigned char c;
    int count;
    struct h_tree *left,*right;
};
int getfilesize(FILE *f)
{
    int i=0;
    fpos_t pos;
    fseek(f,0,SEEK_END);
    fgetpos(f,&pos);
    i=pos;
    fseek(f,0,0);
    return i;
}
int get_lenght(int a[256]) 
{
    int i,r=0;
    for(i=0;i<256;i++) if (a[i]) r+=a[i];
    return r;
}
int f_table_gen(FILE *f,int *a)
{
   int i,k=0,N=0;
   unsigned char c;
   for(i=0;i<256;i++) a[i]=0;
   while (fscanf(f,"%c",&c)==1) 
   {
     // printf("%c - %d\n",c,c);
      a[c]++;
      k++;
   }
   for (i = 0; i < 256; i++)
      if (a[i]) N++;
   printf("total lenght of text %d total number of different symbols %d\n",k,N);
   printf("Generating freq table\n");
   return N;
}
void h_tree_print(struct h_tree **mass_t,int N)
{
    int i;
    for(i=0;i<N;i++) 
     printf("Symbol %c  - Frequerency - %d\n",mass_t[i]->c,mass_t[i]->count);
}
void h_tree_codegen(char *code,struct h_tree *root,int **s,int ln[256])
{

    char *cdl,*cdr;
    int i,l=strlen(code);
    if (root->left==NULL) 
    {
        
        s[root->c]=(int *)malloc(strlen(code)*sizeof(int));
        for(i=0;i<l;i++)
            s[root->c][i]=(code[i]=='0')? 0 : 1;
        ln[root->c]=strlen(code);
        free(code);
        //printf("Symbol %c  Code - ",root->c);
        //for(i=0;i<l;i++) printf("%d",s[root->c][i]);
        //1printf("\n");
        return;
    } else {
     cdl=(char *)malloc((strlen(code)+2)*sizeof(char));
     cdr=(char *)malloc((strlen(code)+2)*sizeof(char));
     strcpy(cdl,code);
     strncpy(cdl+strlen(code),"0\0",2);
     strcpy(cdr,code);
     strncpy(cdr+strlen(code),"1\0",2);
     h_tree_codegen(cdl,root->left,s,ln);
     h_tree_codegen(cdr,root->right,s,ln);
    }
}
void h_tree_insert_sort(struct h_tree **mass_t,int N)
{
        int i,j;
        struct h_tree *x;
        for (i=0;i<N;i++) {
                x=mass_t[i];
                for(j=i-1; j>=0; j--)
                {
                    if ( x->count>mass_t[j]->count) break;
                        mass_t[j+1]=mass_t[j];
                }
                mass_t[j+1]=x;
        }
       // h_tree_print(mass_t,N);
}

void h_tree_unpack(FILE *f,int l,int N,bool *code,struct h_tree *root) 
{
  static int i=0;
  int j=0;
  static int k=0;
  static struct h_tree *t=root;
  if(t==NULL) t=root;
  for(j=0;j<8;j++) 
  {
     if(t==NULL) t=root;
      // printf("%d %d\n",j,t->count);
      if ((code==NULL)||(i==N)||(k>l)) 
        {
            t=NULL;
            i=0;
            k=0;
            return;
        } 
      if (t->left==NULL) { 
          if(i>=N) { 
              i=0;
              t=root;
              return;
          }
          fprintf(f,"%c",t->c);
          t=root;
          i++;
      } 
      if (code[j]==0) t=t->left;  
      if (code[j]==1) t=t->right; 
      k++;
  }
}
void h_tree_generate(int N,int a[256],struct h_tree **mass_t)
{
  int i=0,j=0;
  struct h_tree *leaf;
  //mass_t=(struct h_tree **)malloc(N*sizeof(struct h_tree));
  for(i=0;i<N;i++) mass_t[i]=(struct h_tree *)malloc(sizeof(struct h_tree));
  for(i=0;i<256;i++) 
      if(a[i]){ 
                mass_t[j]->c=(unsigned char)i;
                mass_t[j]->count=a[i];
                mass_t[j]->left=NULL;
                mass_t[j]->right=NULL;
                j++;
              }
  //h_tree_print(mass_t,N);
  while(N>1) {
  leaf=(struct h_tree *)malloc(sizeof(struct h_tree));
  leaf->count=mass_t[0]->count+mass_t[1]->count;
  leaf->left=mass_t[0];
  leaf->right=mass_t[1];
  mass_t[0]=NULL;
  mass_t[1]=leaf;
  for(i=1;i<N;i++) mass_t[i-1]=mass_t[i];
  N--;
  h_tree_insert_sort(mass_t,N);
  }
}
int buffered_input (FILE *f,FILE *f2,bool *code,int l,int N,struct h_tree* root)
{
    int i=0;
    int k=0;
    unsigned char c,d;
    while((((fscanf(f,"%c",&c)==1))&&(i<l))) {
        
      for(k=0; k < 8; k++)
     {
         d=1<<7;
         code[k] = ((c&d)==d);
         c <<= 1;
         i++;
     }
     h_tree_unpack(f2,l,N,code,root);
    }
     h_tree_unpack(f2,l,N,NULL,root);
    return(i);
}
void buffered_output (FILE *f, int code[],int ln)
{
    static unsigned char buffer = 0;
    static int buf_len = 0;
    int i = 0;
    if (NULL == code) 
    {
        fputc(buffer, f);
        buffer  = 0;
        buf_len = 0;
        return ;
    }

    while (i < ln)
    {
        unsigned int mask;
        if (8 == buf_len)
        {
            fputc(buffer, f);
            buffer  = 0;
            buf_len = 0;
        }

        mask = 1 << (7 - buf_len);
        if (1 == code[i])
            buffer |= mask;
        else
            buffer &= ~mask;

        buf_len++;
        i++;
    }
}

void file_arch(FILE *f1,FILE *f2,int **s,int *ln,int *a,int N,char *f_name)
{  
    unsigned char c; 
    int i,l=0;
    fprintf(f2,"%s ",f_name);
    fprintf(f2,"%d ",N);
    for(i=0;i<256;i++) l+=ln[i]*a[i];
    fprintf(f2,"%d ",l);
    for(i=0;i<256;i++) if(a[i]>0) fprintf(f2," %d %d ",i,a[i]);
    while((fscanf(f1,"%c",&c)==1)) {
        buffered_output(f2,s[c],ln[c]);
        //for(i=0;i<ln[c];i++) printf("%d",s[c][i]);
    }
    buffered_output(f2,NULL,0);
}
void file_cpy(FILE *f1,FILE *f2,int size)
{  
    int i=0;
    unsigned char c;
    while((fscanf(f1,"%c",&c)==1)&&(i<size)) {
        fprintf(f2,"%c",c);
        i++;
    }
    fprintf(f2," ");
}
int main (int argc, char **argv) 
{
   FILE *f,*f2;
   struct h_tree **mass_t,**root;
   int **s;
   int  a[256],ln[256],u[256];
   char f_name[256];
   bool g[8];
   int i,N,j=0,k,l;
   int y=0;
   fpos_t pos;
   if (!argv[1]) { 
    printf("Error: no mode given\n"); return -1;
   }
   if (argv[1][2]!='\0') { 
    printf("Error: incorrect mode\n"); return -1;
   }
    switch (argv[1][1]) {
   case 'a': 
 { 
     
     if(argv[2]) 
     { 
         if(f2=fopen(argv[2],"r+")) 
         {
             if(argv[1][0]=='+') {
                 fscanf(f2,"%d",&y);
                 fseek(f2,0,0);
                 for(i=3;i<argc;i++) 
                     if(f=fopen(argv[i],"rb")) fclose(f); else 
                        { printf("Error file not found\n");
                          return -2;
                        }
                 fprintf(f2,"%d ",argc-3+y);
                 fclose(f2);
                 f2=fopen(argv[2],"ab+");
             }
               else f2=fopen(argv[2],"wb+");
         }
         else if(f2=fopen(argv[2],"wb"));  
         else 
       { 
        printf("Error file not found\n");
        return -1;
       }   
     }
       else 
       { 
       printf("Error no filename given\n");
       return -2;
       }
     if (argv[1][0]!='+' || y==0) fprintf(f2,"%d ",argc-3);
    for(k=3;k<argc;k++) 
    {
     
      if(argv[k]) 
      { 
        if(f=fopen(argv[k],"rb")) ; else 
        { 
          printf("Error file not found\n");
          return -1;
        } 
      } else 
      { 
        printf("Error no filename given\n");
        return -2;
      }
   
        N=f_table_gen(f,a);
        fseek(f,0,0);
        s=(int **)malloc(256*sizeof(int *)); 
        mass_t=(struct h_tree **)malloc(N*sizeof(struct h_tree));
        h_tree_generate(N,a,mass_t);
        printf("Generating code\n");
        h_tree_codegen("",mass_t[0],s,ln);
        printf("Generating completed.\n");
        //FILE *f1=fopen(argv[3], "rb");
        file_arch(f,f2,s,ln,a,N,argv[k]);
        fprintf(f2," ");
        printf("Archive created.\n");
        fclose(f);
        // fclose(f2);
    }
    break;
 }
   case 'u':
 {
   if(argv[2]) { 
       if(f=fopen(argv[2],"rb")) ; else 
   { 
       printf("Error file not found\n");
       return -1;
   } 
   } else 
   { 
       printf("Error no filename given\n");
       return -2;
   }
   fscanf(f,"%d",&y);
   for(k=0;k<y;k++) 
   {
    if ((fscanf(f,"%s",f_name))==1); else break;
    fscanf(f,"%d",&N);
    fscanf(f,"%d",&l);
    //g=(bool *)realloc(g,l*sizeof(bool));
    //printf("%d\n",l);
    //printf("%d\n",sizeof(g));
    for(i=0;i<256;i++) u[i]=0;
    for(i=0;i<N;i++){
       fscanf(f," %d ",&j);
       fscanf(f,"%d ",&u[j]);
      // printf("%d %d\n",k,u[k]);
    }
    //for(i=0;i<256;i++) printf ("a[%d] - %d,u[%d] - %d\n",i,a[i],i,u[i]);
    //fclose(f);
    int t,e=0;
    if (argv[3]) e=1;
    for(t=3;t<argc;t++) if (strcmp(f_name,argv[t])==0) e=0;
    if(((f2=fopen(f_name,"r"))&&(argv[1][0]=='+'))||(e)) fseek(f,l/8+1,SEEK_CUR); else 
    {
        root=(struct h_tree **)malloc(N*sizeof(struct h_tree));
        h_tree_generate(N,u,root);
        f2=fopen(f_name,"wb");
        i= buffered_input(f,f2,g,l,get_lenght(u),root[0]);
        fclose(f2);
        printf("Reading completed.");
        printf("\n");
        //h_tree_unpack(f2,i,get_lenght(u),g,root[0]);
        printf("Extracting completed.");
        printf("\n"); 
    }
   }
    fclose(f);
    break;
 }
   case 'i':
 {
    if(argv[2]) { 
       if(f=fopen(argv[2],"rb")) ; else 
     { 
        printf("Error file not found\n");
        return -1;
     } 
       } else 
      { 
         printf("Error no filename given\n");
         return -2;
      }
    }
   if(fscanf(f,"%d",&y)==1); else return -1; 
   printf("This arhive contains %d files\n",y);
   for(k=0;k<y;k++)
   {

     if(3==fscanf(f,"%s %d %d",f_name,&N,&l))
     {
         for(i=0;i<256;i++) u[i]=0; 
         for(i=0;i<N;i++){
             fscanf(f," %d ",&j);
             fscanf(f,"%d ",&u[j]);
             }
         //printf("%d\n",l/8+1);
         fseek(f,l/8+1,SEEK_CUR);
         int m=get_lenght(u),n=1;
         float r=(float)(m-l/8)/m;
         if (m<1024)  printf("-- %s , filesize %d bytes,compressed %d bytes ,compession %.1f %% \n",f_name,m,l/8,r*100);
            else if (m<1048576) printf("-- %s , filesize %.1f kbytes,compressed %.1f kbytes compession %.1f %% \n",f_name,(float)m/1024,(float)l/(8*1024),r*100);
              else  printf("-- %s , filesize %.2f mbytes,compressed %.2f mbytes , compession %.1f %% \n",f_name,(float)m/(1024*1024),(float)l/(8*1024*1024),r*100);
     } 
   }
   i=getfilesize(f);
   if (i<1024) printf("Total arhive size: %d bytes ",i);
      else if(i<1048576) printf("Total arhive size: %.1f kbytes ",(float)i/1024);
        else  printf("Total arhive size: %.2f mbytes ",(float)i/(1024*1024));
   fclose(f);
  break;
   case 'd':
    {
      if(argv[2]) { 
        if(f=fopen(argv[2],"rb")) ; else 
         { 
           printf("Error file not found\n");
           return -1;
         } 
       } else 
          { 
               printf("Error no filename given\n");
               return -2;
          }
       if(!argv[3]) remove(argv[2]);
      fscanf(f,"%d",&y);
      for(k=0;k<y;k++) 
      {
         if ((fscanf(f,"%s",f_name))==1); else break;
         fscanf(f,"%d",&N);
         fscanf(f,"%d",&l);
         //g=(bool *)realloc(g,l*sizeof(bool));
         //printf("%d\n",l);
         //printf("%d\n",sizeof(g));
         for(i=0;i<256;i++) u[i]=0;
         for(i=0;i<N;i++){
         fscanf(f," %d ",&j);
         fscanf(f,"%d ",&u[j]);
       // printf("%d %d\n",k,u[k]);
      }
    //for(i=0;i<256;i++) printf ("a[%d] - %d,u[%d] - %d\n",i,a[i],i,u[i]);
    //fclose(f);
        int t,e=0;
        if (argv[3]) e=1;
        for(t=3;t<argc;t++) if (strcmp(f_name,argv[t])==0) e=0;
      }
    
        break;
    }    
   case 'h':
   {
       printf("Info:\n");
       printf("+a [arhive_name] [file1] ... [fileN]   - add specified files to arhive, or create new if [archive_name] doesnt exist \n ( NOTE :If you are adding files to existing [archive_name] make sure it is a valid arhive) \n");
       printf("-a [arhive_name] [file1] ... [fileN]   - create new arhive with specified files \n( NOTE : If  [archive_name] already exists, it will be overwritten )\n");
       printf("+u [arhive_name] [file1] ... [fileN] - extract specified files from  arhive ( if none given entire arhive will be extracted) , if file with the same name already exists, file wont be extracted.\n");
       printf("-u [arhive_name] [file1] ... [fileN] - extract specified files from  arhive ( if none given entire arhive will be extracted), if file with the same name exists , it will be overwritten.\n");      
       printf("+i [achive_name]  - get information about files in arhive\n");
       //system("h_arh.exe +h");
       break;
   }
   default: 
       { printf("Error : incorrect mode. Type +h for help");
         break;
       }
   }
   
   return 0;
}



Это сообщение отредактировал(а) Avreol - 30.5.2008, 15:11
PM MAIL WWW ICQ   Вверх
mes
Дата 30.5.2008, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(ama_kid @  30.5.2008,  14:19 Найти цитируемый пост)
Avreol, выложи полный изначальный работоспособный код на С++, 

Цитата(Avreol @  30.5.2008,  14:59 Найти цитируемый пост)
Код

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
....
=(char *)malloc((strlen(code)+2)*sizeof(char));
...

приведенный код на  CPP?  smile чудеса  smile 

Это сообщение отредактировал(а) mes - 30.5.2008, 15:34


--------------------
PM MAIL WWW   Вверх
bronislav
Дата 30.5.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: нет
Всего: 3



Мда. Код действительно не на С++, но если внести изменения для того, что бы он корректно собирался С-шным компилятором, то извлечение из архива проходит не корректно.

Вот мне почему-то кажется, что дело в конвертировании bool. Пробую разобраться в этом коде.


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Avreol
Дата 30.5.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 14.4.2008
Где: Новосибирск

Репутация: нет
Всего: нет



мда)) немного ступил) smile  ну все равно же синтаксис немного разный) если поможете спасибо вам огромное))))
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.