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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запутался с односвязным списком, прошу подсказки. 
V
    Опции темы
Killer_13
Дата 13.10.2010, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Значит так, читаю из файла 9 строк, 10 пустая, поэтому просто ее присваиваю левой переменной.
Читаю и в сл цыкле вывожу в другой файл.

Как то криво пишет данные в структуру, а в файл не записывает вообще ничего.

Если не трудно подскажите куда смотреть..
Пасиб.

Код

void Anmeld(void){

    struct Anmeldung liste;
    struct Anmeldung *root = NULL;
    struct Anmeldung *temp=NULL;
    ifstream csv("anmeldung.csv");
    ofstream scsv("anm.csv");
    string tem;

    while(!csv.eof()){

        Anmeldung *pers = new Anmeldung;
        pers->next = NULL;
        //root = temp;

        getline(csv,liste.Nachname,'\n');
        getline(csv,liste.Vorname,'\n');
        getline(csv,liste.Email,'\n');
        getline(csv,liste.Matrikelnummer,'\n');
        getline(csv,liste.Studienrichtung,'\n');
        getline(csv,liste.Semester,'\n');
        getline(csv,liste.G1name,'\n');
        getline(csv,liste.G1vorname,'\n');
        getline(csv,liste.Anmerkung,'\n');
        getline(csv,tem,'\n');
    }

    temp=root;

    while(temp != NULL){

        temp=temp->next;
        scsv<<temp->Nachname<<";";
        scsv<<temp->Vorname<<";";
        scsv<<temp->Email<<";";
        scsv<<temp->Matrikelnummer<<";";
        scsv<<temp->Studienrichtung<<";";
        scsv<<temp->Semester<<";";
        scsv<<temp->G1name<<";";
        scsv<<temp->G1vorname<<";";
        scsv<<temp->Anmerkung<<";";
    }
}

PM MAIL   Вверх
Killer_13
Дата 13.10.2010, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ДОРАБОТАЛ!!!
Все выдает, пишет в файл, но данные как то вперемешку, господа, не глянете?

Заранее благодарен!

Код

void Anmeld(void){

    struct Anmeldung *root = NULL;
    struct Anmeldung *temp=NULL;
    struct Anmeldung *node;
    ifstream csv("anmeldung.csv");
    ofstream scsv("anm.csv");
    string tem;

    while(!csv.eof()){

        struct Anmeldung* node = new Anmeldung;

        node->next = root;
        root=node;
        
        getline(csv,root->Nachname,'\n');
        getline(csv,root->Vorname,'\n');
        getline(csv,root->Email,'\n');
        getline(csv,root->Matrikelnummer,'\n');
        getline(csv,root->Studienrichtung,'\n');
        getline(csv,root->Semester,'\n');
        getline(csv,root->G1name,'\n');
        getline(csv,root->G1vorname,'\n');
        getline(csv,root->Anmerkung,'\n');
        getline(csv,tem,'\n');

    }
    
    temp=root;

    while(temp != NULL){

        temp=temp->next;
        
        scsv<<temp->Nachname<<";";
        scsv<<temp->Vorname<<";";
        scsv<<temp->Email<<";";
        scsv<<temp->Matrikelnummer<<";";
        scsv<<temp->Studienrichtung<<";";
        scsv<<temp->Semester<<";";
        scsv<<temp->G1name<<";";
        scsv<<temp->G1vorname<<";";
        scsv<<temp->Anmerkung<<";";
    }
}


Добавлено через 10 минут и 8 секунд
Сначало пишет вот так ";;;;;;;;; а потом начинает писать в строку с последнего элемента, потом предпоследний, потом.. так д.. последний элемент то который должен быть первым. Что то нужно поменять, чтоб начинало с первого.
Пасиб"
PM MAIL   Вверх
xvr
Дата 14.10.2010, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Вы когда читаете файл, создаете список, вставляя новый элемент в начало. Таким образом у вас образуется инверсный список (последний элемент в начале, первый в конце). А выводите вы список в прямом порядке (от начала к концу).
Меняйте способ добавления элемента в список

PM MAIL   Вверх
Killer_13
Дата 14.10.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ок, понятно, что вывод структуры в файл у меня правильный, теперь не получается изменить правильную запись в структуру, вроде все правильно немогу догнать что поменять.. :(

Вот такая у меня структура, может потому глюк, что указатель на следующий элемент стоит в начале структуры?
Код

struct Anmeldung {
  Anmeldung* next;
  string   Nachname;      
  string   Vorname;         
  string   Email;                
  string   Matrikelnummer;       
  string   Studienrichtung;      
  string   Semester;            
  string   G1name;              
  string   G1vorname;           
  string   Anmerkung;            
};


а вот так я в нее записываю.

Код

struct Anmeldung *root = NULL;
    struct Anmeldung *temp=NULL;
    struct Anmeldung *node,*old;
    ifstream csv("anmeldung.csv");
    ofstream scsv("anm.csv");
    string tem;

    while(!csv.eof()){

        struct Anmeldung* node = new Anmeldung;

        node->next = root;
        root=node;
        
        getline(csv,root->Nachname,'\n');
        getline(csv,root->Vorname,'\n');
        getline(csv,root->Email,'\n');
        getline(csv,root->Matrikelnummer,'\n');
        getline(csv,root->Studienrichtung,'\n');
        getline(csv,root->Semester,'\n');
        getline(csv,root->G1name,'\n');
        getline(csv,root->G1vorname,'\n');
        getline(csv,root->Anmerkung,'\n');
        getline(csv,tem,'\n');
    }

подскажите, а то хожу кругами.. :(
PM MAIL   Вверх
xvr
Дата 14.10.2010, 16:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Это запись в начало. Для записи в конец надо либо иметь отдельный указатель на конец списка, либо каждый раз искать этот конец сканируя список с начала

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


Опытный
**


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

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



хорошо, подскажите тогда где копать, а роюсь в инете, а там все примеры стандартные... и свою задачку делал по такому же примеру...
PM MAIL   Вверх
bsa
Дата 14.10.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Killer_13, все очень просто. введи еще одну переменную - указатель на последний элемент списка (это вместо строк 10-13): 
Код
node = new Anmeldung;
if (last)
   last->next = node
last = node;
//...

PM   Вверх
Killer_13
Дата 14.10.2010, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хммммм, а для меня все оч сложно.. :(:(:( 
Не работает...

Код

Anmeldung *root = NULL;
    Anmeldung *temp=NULL;
    Anmeldung *node = NULL,*last = NULL;
    ifstream csv("anmeldung.csv");
    ofstream scsv("anm.csv");
    string tem;

    while(!csv.eof()){

        node = new Anmeldung;
        if (last)
            last->next = node;
        last = node;
        
        getline(csv,root->Nachname,'\n');
        getline(csv,root->Vorname,'\n');
        getline(csv,root->Email,'\n');
        getline(csv,root->Matrikelnummer,'\n');
        getline(csv,root->Studienrichtung,'\n');
        getline(csv,root->Semester,'\n');
        getline(csv,root->G1name,'\n');
        getline(csv,root->G1vorname,'\n');
        getline(csv,root->Anmerkung,'\n');
        getline(csv,tem,'\n');
    }
    
    temp=node;

    while(temp != NULL){
        
        scsv<<temp->Nachname<<";";
        scsv<<temp->Vorname<<";";
        scsv<<temp->Email<<";";
        scsv<<temp->Matrikelnummer<<";";
        scsv<<temp->Studienrichtung<<";";
        scsv<<temp->Semester<<";";
        scsv<<temp->G1name<<";";
        scsv<<temp->G1vorname<<";";
        scsv<<temp->Anmerkung<<";";
        temp=temp->next;
    }

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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



После 10 строки напишите
Код

if (!temp) temp=node;
Строку 27 уберите

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


Эксперт
****


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

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



Killer_13, а если хорошенько подумать? Например над тем, чем будет равен root. И над тем, куда читаются данные из csv... Я же не полностью готовый код дал, а лишь идею.
PM   Вверх
Killer_13
Дата 14.10.2010, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



bsa беру карандаш, листик, буду рисовать и думать, уж очень хочется добить эту тему. smile
Как что надумаю отпишусь.
xvr - сделал - не работает. :(
PM MAIL   Вверх
fuckingniger
Дата 14.10.2010, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Killer_13 @  13.10.2010,  21:30 Найти цитируемый пост)
  
Код

 while(temp != NULL){
        temp=temp->next;
        
        scsv<<temp->Nachname<<";";
        scsv<<temp->Vorname<<";";
        scsv<<temp->Email<<";";
        scsv<<temp->Matrikelnummer<<";";
        scsv<<temp->Studienrichtung<<";";
        scsv<<temp->Semester<<";";
        scsv<<temp->G1name<<";";
        scsv<<temp->G1vorname<<";";
        scsv<<temp->Anmerkung<<";";
    }
}


тут определенно неправильное условие окончания цикла 
условие для одного элемента а работаешь в цикле ты с другим


Модератор: отформатировал сообщение, чтобы читалось и помещалось на экране

Это сообщение отредактировал(а) bsa - 14.10.2010, 17:49
PM MAIL   Вверх
Killer_13
Дата 14.10.2010, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот что надумал, просмотрите ход мыслей, спасибо.

Код

Anmeldung* root=NULL; // устанавливаем корневой указатель и с самого начала присваиваем ему НИЧЕГО - NULL
Anmeldung* newpers = new Anmeldung; //создаем указатель newpers типа Anmeldung который указывает на новосозданную структуру Anmeldung
Anmeldung* current = root; // создаем указатель который ссылается на root

if(root == NULL){               //проверяем пустой ли у нас список, если пустой, то
     curr = root = newpers; // корневому указателю, указателю на текущий элемент присваиваем указатель на наш новый обьект
     newpers->next=NULL; // делаем заглушку, если элементов больше не будет..
}
else{

      Anmeldung* currentnext = root; //создаем сл элемент списка который ссылактся на корневой
      newpers->next=currentnext;      //указателю обьекта присваиваем указатель на со элемент
}

        getline(csv,root->Nachname,'\n');
        getline(csv,root->Vorname,'\n');
        getline(csv,root->Email,'\n');
        getline(csv,root->Matrikelnummer,'\n');
        getline(csv,root->Studienrichtung,'\n');
        getline(csv,root->Semester,'\n');
        getline(csv,root->G1name,'\n');
        getline(csv,root->G1vorname,'\n');
        getline(csv,root->Anmerkung,'\n');
        getline(csv,tem,'\n');




Может многое что я написал не оч правильно, но попробовал, вот что получилось...
Заранее спас за помощь..

Добавлено через 1 минуту и 24 секунды
fuckingniger - "нипанятна" - а на что заменить, смотрел несколько примеров - вывод элементов осуществляется так..
PM MAIL   Вверх
Killer_13
Дата 14.10.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Уряяя частично заработало

Вот код, считывает 1 элемент и выводит так как мне нужно, как только я добавляю цыкл чтоб читать до конца файла, то виснет начинает писать в файл. smile сделал быстренько мне файл размером 1 гб, пока не остановил. smile
Что еще не так.. что то не тау с записью в файл.. скорее всего..

Код

    ifstream csv("anmeldung.csv");
    ofstream scsv("anm.csv");
    string tem;
    Anmeldung* root=NULL;
    Anmeldung* newpers = new Anmeldung;
    Anmeldung* temp = root;
    
    if(root == NULL){
        temp = root = newpers;
        newpers->next=NULL;
    }
    else{
        Anmeldung* currentnext = root;
        newpers->next=currentnext;
    }

        getline(csv,root->Nachname,'\n');
        getline(csv,root->Vorname,'\n');
        getline(csv,root->Email,'\n');
        getline(csv,root->Matrikelnummer,'\n');
        getline(csv,root->Studienrichtung,'\n');
        getline(csv,root->Semester,'\n');
        getline(csv,root->G1name,'\n');
        getline(csv,root->G1vorname,'\n');
        getline(csv,root->Anmerkung,'\n');
        getline(csv,tem,'\n');

    while(temp != NULL){
        
        scsv<<temp->Nachname<<";";
        scsv<<temp->Vorname<<";";
        scsv<<temp->Email<<";";
        scsv<<temp->Matrikelnummer<<";";
        scsv<<temp->Studienrichtung<<";";
        scsv<<temp->Semester<<";";
        scsv<<temp->G1name<<";";
        scsv<<temp->G1vorname<<";";
        scsv<<temp->Anmerkung<<";";
        temp=temp->next;
    }

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


Эксперт
****


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

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



Killer_13, мне надоело тебе объяснять:
Код
    Anmeldung *root = NULL;
    Anmeldung *temp=NULL;
    Anmeldung *node = NULL,*last = NULL;
    ifstream csv("anmeldung.csv");
    ofstream scsv("anm.csv");
    string tem;
    while(!csv.eof()){
        node = new Anmeldung; //надеюсь, конструктор обнуляет поле next?
        if (last)
            last->next = node;
        else
            root = node; //we are load first element of the list
        last = node;
        
        getline(csv,node->Nachname,'\n'); //читаем в только что созданный элемент списка, а не в первый
        getline(csv,node->Vorname,'\n');
        getline(csv,node->Email,'\n');
        getline(csv,node->Matrikelnummer,'\n');
        getline(csv,node->Studienrichtung,'\n');
        getline(csv,node->Semester,'\n');
        getline(csv,node->G1name,'\n');
        getline(csv,node->G1vorname,'\n');
        getline(csv,node->Anmerkung,'\n');
        getline(csv,tem,'\n');
    }
    
    temp = root; //начинаем с первого элемента...
    while(temp != NULL){
        
        scsv<<temp->Nachname<<";";
        scsv<<temp->Vorname<<";";
        scsv<<temp->Email<<";";
        scsv<<temp->Matrikelnummer<<";";
        scsv<<temp->Studienrichtung<<";";
        scsv<<temp->Semester<<";";
        scsv<<temp->G1name<<";";
        scsv<<temp->G1vorname<<";";
        scsv<<temp->Anmerkung<<";";
        temp=temp->next;
    }


Это сообщение отредактировал(а) bsa - 14.10.2010, 17:53
PM   Вверх
Killer_13
Дата 14.10.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



bsa //надеюсь, конструктор обнуляет поле next? - нет, это задание пока без конструкторов.. :(

А мой вариант тоже работал, просто выводил почему то только один элемент. :(
PM MAIL   Вверх
bsa
Дата 14.10.2010, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Killer_13 @  14.10.2010,  19:06 Найти цитируемый пост)
нет, это задание пока без конструкторов..

Тогда зануляй вручную сразу после new.
PM   Вверх
Killer_13
Дата 14.10.2010, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

node = new Anmeldung; //надеюсь, конструктор обнуляет поле next?
node->next = NULL;       // ПРАВИЛЬНО? :)
        if (last)
            last->next = node;



Это сообщение отредактировал(а) Killer_13 - 14.10.2010, 19:46
PM MAIL   Вверх
Killer_13
Дата 14.10.2010, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



По ходу все работает, но почему то в конце строки печатается еще один пустой элемент. тоисть ";;;;;;;;;;" - что не так?
PM MAIL   Вверх
bsa
Дата 14.10.2010, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Killer_13 @  14.10.2010,  21:10 Найти цитируемый пост)
почему то в конце строки печатается еще один пустой элемент. тоисть ";;;;;;;;;;" - что не так? 

Потому что eof замечает ошибку только после попытки прочитать за концом файла. Поэтому, ты должен проверять результат выполнения каждого getline:
Код
node = new ....;
node->next = 0; //в С++ можно использовать 0 вместо NULL
bool res = getline(...);
res = res && getline(...);
...
if (res) {
        if (last)
            last->next = node;
        else
            root = node; //we are load first element of the list
        last = node;
} else
   delete node;

PM   Вверх
Killer_13
Дата 17.10.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

bool res = getline(...);
res = res && getline(...);

Брр, не понял, как проверять каждый гетлайн? Прошу прощения если оч сильно туплю. :(
PM MAIL   Вверх
bsa
Дата 17.10.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Killer_13 @  17.10.2010,  20:55 Найти цитируемый пост)
Прошу прощения если оч сильно туплю. :( 

я же тебе написал. строки 3 и 4. Остальные по аналогии с 4-й.
PM   Вверх
Killer_13
Дата 17.10.2010, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все, написал. Работает.

Теперь хочу написать все ли я правильно понял. Тоисть разобрался ли.

создаем элемен, зануляем его
функция гетлайн возвращает true  если она сработала если нет, - тогда false
На последней строчке вона возвращает false тогда переменной res присваивается "0"
дальше "res = 0" "гетлайн снова возвращает 0", а 0&&0 = 0
Будет срабатывать только тогда когда 1&&1=1 
дальше проверка, если res=0 if не срабатывает и наш элемент удаляется "delete node"
если срабатівает, тогда все понятно... дальше я понимаю как работает.

Большое спас. smile
PM MAIL   Вверх
bsa
Дата 18.10.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Killer_13 @  18.10.2010,  00:23 Найти цитируемый пост)
функция гетлайн возвращает true  если она сработала если нет, - тогда false

Почитай документацию (сначала здесь, а затем тут), что ли... А не гадай на кофейной гуще.
Цитата(Killer_13 @  18.10.2010,  00:23 Найти цитируемый пост)
дальше "res = 0" "гетлайн снова возвращает 0", а 0&&0 = 0
Почитай книжку по С++. В частности, про &&.
PM   Вверх
Killer_13
Дата 18.10.2010, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(bsa @ 18.10.2010,  10:04)
Цитата(Killer_13 @  18.10.2010,  00:23 Найти цитируемый пост)
функция гетлайн возвращает true  если она сработала если нет, - тогда false

Почитай документацию (сначала здесь, а затем тут), что ли... А не гадай на кофейной гуще.
Цитата(Killer_13 @  18.10.2010,  00:23 Найти цитируемый пост)
дальше "res = 0" "гетлайн снова возвращает 0", а 0&&0 = 0
Почитай книжку по С++. В частности, про &&.

Цитата

failbit    No characters were extracted because the end was prematurely found.Notice that some eofbit cases will also set failbit.


под этим я имел введу возвращает false, да я не корректно, неправильно написал. Да и не думал что getline возвращает istream& 

на счет void* кажется тоже понял, но вслух не буду, а то уже страшно. :(


На счет && книга читал, и не одну, прям сейчас перелистал 2 книги. Я все правильно понял. Если логическое "и" то будет истина когда и первое и второе значение истина. ЧТО не так?

Спасибо.
PM MAIL   Вверх
bsa
Дата 18.10.2010, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Killer_13 @  18.10.2010,  11:23 Найти цитируемый пост)
на счет void* кажется тоже понял, но вслух не буду, а то уже страшно. :(
лучше озвучь, я не препод - двойку не поставлю.
Цитата(Killer_13 @  18.10.2010,  11:23 Найти цитируемый пост)
На счет && книга читал, и не одну, прям сейчас перелистал 2 книги. Я все правильно понял. Если логическое "и" то будет истина когда и первое и второе значение истина. ЧТО не так?
все правильно. Только это не все. У этого оператора (как и у ||) есть одно "побочное" действие. Если справа стоит выражение, а левый результат получился false, то правый даже вычисляться не будет. Применительно к нашему случаю, если res == false, то ни один getline не будет вызван. Другими словами, строка res = res && getline(...) эквивалентна:
Код
if (res)
   res = getline(...);

PM   Вверх
Killer_13
Дата 18.10.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Если справа стоит выражение, а левый результат получился false, то правый даже вычисляться не будет


Точно, вспомнил - преподаватель рассказывал.

Я думаю вы решили мне  подсказать
Код

null pointer if either failbit or badbit is set.
A non-null pointer otherwise. 


Код

ifstream is;
  is.open ("test.txt");
  if ( (void*)is == 0)
    cerr << "Error opening 'test.txt'\n";


Тоисть если файл не открывается, то получается пустой, нуль указатель.

Это вы имели введу?
PM MAIL   Вверх
bsa
Дата 18.10.2010, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Killer_13, нет. Это таким образом делают преобразование к типу bool... Хотя менее опасно это делать через указатель на член класса.
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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