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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2012, 16:18   #1
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию Классы. Динамические массивы. Чтение из файла.

Всем привет!
Вот часть задания:

"Создать класс "танкер", у которого будет такие параметры - номер, имя, объем, расстояние, расход, цена литра" - это сделано.

"Создать массив из танкеров которые параметры которых записаны в фале input.txt, размер массив = количеству строк в файле(т.е. кол-ву танкеров) " - тоже сделано.

"Загрузить данные по танкерам в массив" - не могу сделать!

вот код:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string.h>
#include <vector>

#pragma hdrstop

class Tanker{
public:
        int id;
        char name;
        int Vt;      //обьем танкера
        int S;       //растояние
        int VS;      //расход литр/1км
        int cost;    //цена литра
        
};


//---------------------------------------------------------------------------

using namespace std;

#pragma argsused
int main()
{

        int i,n=0,c,j,cc=0, tankerid=0;
        char line[200];
        char temp[200];
        char *p;

        ifstream infile("input.txt");

        while(!infile.eof()){
                infile.getline(temp, 200);
                n++;
        }

        Tanker *tanker=new Tanker[n];

        while(!infile.eof()){

                infile.getline(line, 200);

                cc=0;
                p=strtok(line, " ");
                while(p!=NULL){

                        if(cc=0){tanker[tankerid]->id=atoi(p);}
                        if(cc=1){tanker[tankerid]->name=p;}
                        if(cc=2){tanker[tankerid]->Vt=atoi(p);}
                        if(cc=3){tanker[tankerid]->S=atoi(p);}
                        if(cc=4){tanker[tankerid]->VS=atoi(p);}
                        if(cc=5){tanker[tankerid]->cost=atoi(p);}
                        cc++;
                }
                tankerid++;

        }

        infile.close();

        


        getch();
        return 0;
}
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 15.04.2012, 22:59   #2
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

ухх.. это не возможно!!
уже и так и сяк перепробовал!

господа программисты, прошу вашей помощи!
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 15.04.2012, 23:32   #3
ZoRT
Пользователь
 
Регистрация: 20.01.2012
Сообщений: 16
По умолчанию

Код:
              p=strtok(line, " ");
                while(p!=NULL){

                        if(cc=0){tanker[tankerid]->id=atoi(p);}
                        if(cc=1){tanker[tankerid]->name=p;}
                        if(cc=2){tanker[tankerid]->Vt=atoi(p);}
                        if(cc=3){tanker[tankerid]->S=atoi(p);}
                        if(cc=4){tanker[tankerid]->VS=atoi(p);}
                        if(cc=5){tanker[tankerid]->cost=atoi(p);}
                        cc++;
                }
у вас значение p в цикле не изменяется, отсюда и зацикливание.
ZoRT вне форума Ответить с цитированием
Старый 15.04.2012, 23:43   #4
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

это да.. я уже это переписал.. еще тут сравнение не правильно написано)

Код:
        while(!infile.eof()){
                infile.getline(line, 100);
                p=strtok(line, " ");
                cc=0;
                while(p!=NULL){
                        if(cc==0){tanker[tankerid].id=atoi(p);}
                        if(cc==1){strcpy(tanker[tankerid].name, p);}
                        if(cc==2){tanker[tankerid].Vt=atoi(p);}
                        if(cc==3){tanker[tankerid].S=atoi(p);}
                        if(cc==4){tanker[tankerid].VS=atoi(p);}
                        if(cc==5){tanker[tankerid].cost=atoi(p);}
                        p=strtok(NULL, " ");
                        cc++;
                }
                tankerid++;
        }
Спеши медленно.

Последний раз редактировалось asmars; 16.04.2012 в 00:14.
asmars вне форума Ответить с цитированием
Старый 16.04.2012, 00:18   #5
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

решил так написать..
Код:
struct tanker{
        int id;
        char name;
        int Vt;      //обьем танкера
        int S;       //растояние
        int VS;      //расход литр/1км
        int cost;    //цена литра

};

//---------------------------------------------------------------------------

using namespace std;

#pragma argsused
int main()
{

        int i,n=0,c,j,cc=0, tankid=0;
        char line[100];
        char temp[100];
        char *p;

        ifstream infile("input.txt");

        while(!infile.eof()){
                infile.getline(temp, 100);
                n++;
        }


        tanker *tank=new tanker[n];

        while(!infile.eof()){
                infile.getline(line, 100);
                p=strtok(line, " ");
                cc=0;
                while(p!=NULL){
                        if(cc==0){tank[tankid].id=atoi(p);}
                        if(cc==1){strcpy(tank[tankid].name, p);}
                        if(cc==2){tank[tankid].Vt=atoi(p);}
                        if(cc==3){tank[tankid].S=atoi(p);}
                        if(cc==4){tank[tankid].VS=atoi(p);}
                        if(cc==5){tank[tankid].cost=atoi(p);}
                        p=strtok(NULL, " ");
                        cc++;
                }
                tankid++;
        }



        infile.close();


        getch();
        return 0;
}
но все равно ругается!! на эту строчку
Код:
if(cc==1){strcpy(tank[tankid].name, p);}
но даже если ее заремить, все равно структура не заполняется данными из файла.
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 16.04.2012, 00:33   #6
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

уряя!!!
заработало ! но пришлось прибегнуть к повторному открытию файла..

Код:
struct tanker{
        int id;
        char name;
        int Vt;      //обьем танкера
        int S;       //растояние
        int VS;      //расход литр/1км
        int cost;    //цена литра

};

//---------------------------------------------------------------------------

using namespace std;

#pragma argsused
int main()
{

        int i,n=0,c,j,cc=0, tankid=0;
        char line[100];
        char temp[100];
        char *p;

        ifstream infile("input.txt");

        while(!infile.eof()){
                infile.getline(temp, 100);
                n++;
        }
        infile.close();

        ifstream in("input.txt");
        tanker *tank=new tanker[n];

        while(!in.eof()){
                in.getline(line, 100);
                p=strtok(line, " ");
                cc=0;
                while(p!=NULL){
                        if(cc==0){tank[tankid].id=atoi(p);}
                        //if(cc==1){strcpy(tank[tankid].name, p);}
                        if(cc==2){tank[tankid].Vt=atoi(p);}
                        if(cc==3){tank[tankid].S=atoi(p);}
                        if(cc==4){tank[tankid].VS=atoi(p);}
                        if(cc==5){tank[tankid].cost=atoi(p);}
                        cout<<p<<" ";
                        p=strtok(NULL, " ");
                        cc++;
                }
                cout<<endl;
                tankid++;
        }

        in.close();
несколько вопросов..
1.Думаю можно обойтись одним открытием файла. Но как???

2.Почему оно ругается на
Код:
if(cc==1){strcpy(tank[tankid].name, p);}
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 16.04.2012, 00:48   #7
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

решил)

проблема была потому, что в структуре не указано было кол-во символов

Код:
struct tanker{
        int id;
        char name[20];
        int Vt;      //обьем танкера
        int S;       //растояние
        int VS;      //расход литр/1км
        int cost;    //цена литра

};

//---------------------------------------------------------------------------

using namespace std;

#pragma argsused
int main()
{

        int i,n=0,c,j,cc=0, tankid=1;
        char line[100];
        char temp[100];
        char *p;

        ifstream infile("input.txt");

        while(!infile.eof()){
                infile.getline(temp, 100);
                n++;
        }
        infile.close();

        ifstream in("input.txt");
        tanker *tank=new tanker[n];

        while(!in.eof()){
                in.getline(line, 100);
                p=strtok(line, " ");
                cc=0;
                while(p!=NULL){
                        if(cc==0){tank[tankid].id=atoi(p);}
                        if(cc==1){strcpy(tank[tankid].name, p);}
                        if(cc==2){tank[tankid].Vt=atoi(p);}
                        if(cc==3){tank[tankid].S=atoi(p);}
                        if(cc==4){tank[tankid].VS=atoi(p);}
                        if(cc==5){tank[tankid].cost=atoi(p);}
                        cout<<p<<" ";
                        p=strtok(NULL, " ");
                        cc++;
                }
                cout<<endl;
                tankid++;
        }

        in.close();

        cout<<endl<<tank[1].name;


        getch();
        return 0;
}
Спеши медленно.
asmars вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические массивы lady.ulumba Помощь студентам 2 22.11.2011 18:05
Динамические массивы Solnze2 Помощь студентам 0 22.05.2011 20:54
динамические массивы - C++ ? denes Общие вопросы C/C++ 31 18.06.2010 10:57
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
Динамические массивы и вывод массива из файла. Serjuk Общие вопросы C/C++ 7 28.12.2009 15:26