Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2018, 23:51   #1
koderepta
Новичок
Джуниор
 
Регистрация: 10.01.2018
Сообщений: 1
По умолчанию не компилится код при gcc

Код:
#include <stdio.h>
#include <stdlib.h>

typedef struct _SLine
{
 double start;
 double end;
 double length()
 {
  return (end-start);
 }
 
 
}Line;

typedef struct _SJLine
{
 double start;
 double end;
 double length()
 {
  return (end-start);
 }
 int *m;
 void set_mas_leng(int l)
 {
  m=(int*)malloc(l*sizeof(int));
 }
 
}JLine;


int read(const char *sf,Line **mas,int *leng)
{
 FILE *f;
 int i=0;
 double xz1,xz2;
 f=fopen(sf,"r");
 if(fscanf(f,"%d",leng)!=1) return -1; 
 else
 {
  (*mas)=(Line*)malloc(*leng/2*sizeof(Line));
  for(i=0;i<*leng;i++)
  {
   fscanf(f,"%lf", &xz1);
   fscanf(f,"%lf", &xz2);
   (*mas+i)->start=xz1;
   (*mas+i)->end=xz2;
  }
  *leng=*leng/2;
   fclose(f);
 }
 return 0;
}



int consist(JLine l1,Line l2) //prinadlejit li l2 sisteme otrezkov l1 i vihodit za ee predeli
{
 if(l2.start>=l1.start&&l2.start<=l1.end && l2.end>l1.end) return 1; else return 0;
}

void set_zero(int *m,int l)
{
 int i;
 for(i=0;i<l;i++)
 {
  m[i]=0;
 }
}


int main(int __argc,const char *__argv[])
{
 if(__argc>1)
 {
 FILE *f;
 Line *mas;
 JLine l,max;
 int leng=0,i=0,g=0,h=0;
     
  if(read(__argv[1],&mas,&leng)==0)
   {
  l.set_mas_leng(leng);max.set_mas_leng(leng);
  max.start=0;max.end=0;
  for(i=0;i<leng;i++)
 {
  set_zero(l.m,leng);
  l.start=mas[i].start;l.end=mas[i].end;
  l.m[i]=1;
  for(g=0;g<leng;g++)
  {
   if(g!=i)
   {
    if(consist(l,mas[g])==1)
    {
     l.end=mas[g].end;
     l.m[g]=1;
    }
   }

  }
  if(l.length()>max.length()) {max.start=l.start;max.end=l.end; for(h=0;h<leng;h++) max.m[h]=l.m[h];}
 }
  
  f=fopen(__argv[2],"w");
  for(i=0;i<leng;i++)
  {
   if(max.m[i]==1) fprintf(f,"%lf %lf ",mas[i].start,mas[i].end); 
   
  }
  fclose(f);
 }
 }
}

Последний раз редактировалось Аватар; 11.01.2018 в 08:51.
koderepta вне форума Ответить с цитированием
Старый 11.01.2018, 00:59   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Что помешало привести сразу сообщение компилятора об ошибке?
Black Fregat вне форума Ответить с цитированием
Старый 11.01.2018, 04:51   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Уберите из имён своих переменных двойные подчёркивания в начале!
Стандарт это явно запрещает, так как такие имена резервируются для внутренних нужд компилятора.

А если хотите подробнее, то в файле stdlib.h есть такой код
Код:
#define __argc (*__p___argc())
#define __argv (*__p___argv())
И компилятор C этот код всё равно не откомпилирует, только C++.
Нельзя в чистом C объявлять функции внутри структур.
Black Fregat вне форума Ответить с цитированием
Старый 11.01.2018, 08:18   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Ну что за неуважение?
Код:
#include <stdio.h>
#include <stdlib.h>

typedef struct _SLine
{
    double start;
    double end;
    double length()
    {
        return (end-start);
    }


} Line;

typedef struct _SJLine
{
    double start;
    double end;
    double length()
    {
        return (end-start);
    }
    int *m;
    void set_mas_leng(int l)
    {
        m=(int*)malloc(l*sizeof(int));
    }

} JLine;


int read(const char *sf,Line **mas,int *leng)
{
    FILE *f;
    int i=0;
    double xz1,xz2;
    f=fopen(sf,"r");
    if(fscanf(f,"%d",leng)!=1) return -1;
    else
    {
        (*mas)=(Line*)malloc(*leng/2*sizeof(Line));
        for(i=0; i<*leng; i++)
        {
            fscanf(f,"%lf", &xz1);
            fscanf(f,"%lf", &xz2);
            (*mas+i)->start=xz1;
            (*mas+i)->end=xz2;
        }
        *leng=*leng/2;
        fclose(f);
    }
    return 0;
}



int consist(JLine l1,Line l2) //prinadlejit li l2 sisteme otrezkov l1 i vihodit za ee predeli
{
    if(l2.start>=l1.start&&l2.start<=l1 .end && l2.end>l1.end) return 1;
    else return 0;
}

void set_zero(int *m,int l)
{
    int i;
    for(i=0; i<l; i++)
    {
        m[i]=0;
    }
}


int main(int __argc,const char *__argv[])
{
    if(__argc>1)
    {
        FILE *f;
        Line *mas;
        JLine l,max;
        int leng=0,i=0,g=0,h=0;

        if(read(__argv[1],&mas,&leng)==0)
        {
            l.set_mas_leng(leng);
            max.set_mas_le ng(leng);
            max.start=0;
            max.end=0;
            for(i=0; i<leng; i++)
            {
                set_zero(l.m,leng);
                l.start=mas[i].start;
                l.end=mas[i].end;
                l.m[i]=1;
                for(g=0; g<leng; g++)
                {
                    if(g!=i)
                    {
                        if(consist(l,mas[g])==1)
                        {
                            l.end=mas[g].end;
                            l.m[g]=1;
                        }
                    }

                }
                if(l.length()>max.length()) {
                    max.start=l.start;
                    max.end=l.end;
                    for(h=0; h<leng; h++) max.m[h]=l.m[h];
                }
            }

            f=fopen(__argv[2],"w");
            for(i=0; i<leng; i++)
            {
                if(max.m[i]==1) fprintf(f,"%lf %lf ",mas[i].start,mas[i].end);

            }
            fclose(f);
        }
    }
}
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.01.2018, 18:58   #5
Андрей Ш++
учу с++
Пользователь
 
Аватар для Андрей Ш++
 
Регистрация: 06.10.2017
Сообщений: 44
По умолчанию

Там кажысь ошибка в коде присмотрись внемательней :-)
Андрей Ш++ вне форума Ответить с цитированием
Старый 11.01.2018, 22:43   #6
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от Андрей Ш++ Посмотреть сообщение
Там кажысь ошибка в коде присмотрись внемательней :-)
Это стёб такой? Или Вы солидарны с ТС во мнении, что труЪ программист должен видеть ошибку в двух страницах кода невооружённым глазом?

Впрочем, ТС интерес к топику потерял..
Black Fregat вне форума Ответить с цитированием
Старый 11.01.2018, 22:49   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Впрочем, ТС интерес к топику потерял..
О!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.01.2018, 23:16   #8
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
О!
Ну как в том анекдоте - "А у меня было ещё столько идей.."
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка компилятора gcc при использовании библиотека SDL в C V.O.L.T. Помощь студентам 1 25.08.2015 16:10
Как исправить ошибку при компиляции в Linux(gcc) heret1c Помощь студентам 6 26.05.2013 20:22
LNK2019 при подключении .h файла (при подключении .cpp все компилится) RomanA Visual C++ 3 16.04.2012 07:47
Ошибка при компиляции <mqueue.h> gcc CodeStudent Qt и кроссплатформенное программирование С/С++ 3 23.06.2010 16:53