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

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

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2014, 15:25   #1
PaPoV
Новичок
Джуниор
 
Регистрация: 07.04.2014
Сообщений: 1
По умолчанию Проблема с указателем в файловом потоке

Есть функция, которая принимает в качестве параметра поток fstream. Структура файла:
1 Reno Clio hetchback 5
2 Skoda Octavia sedan 4
Начиная с конца файла я посимвольно считываю, пока не найду символ '\n' , затем считываю номер строки.
Создаю динамический массив объектов и выполняю в нем поиск.
Первый вызов проходит нормально, все работает идеально, но после второго вызова этой функции посимвольное считывание не происходит ( tellg() возвращает -1). В чем причина? Я не могу понять.


#include "menu.h"
#include "car.h"
#include <fstream>
#include <string.h>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
void Menu::SerDB(fstream* odb){
Car *m_ob;
char temp[10],mar[20],mod[20],cuz[15];
int i=0,j=0,t,n;
//odb->sync();
//odb->seekg(0,ios::end);
cout<<odb->tellg();getch();
odb->seekg(-2,ios::end);
while(odb->get()!='\n')
{odb->seekg(-2,ios::cur);i++;t=odb->tellg();}
*odb>>temp;
i=atoi(temp);
if(!i){ cout<<temp<<" wrong";exit(1);}
m_ob=new Car[i];
odb->seekg(0,ios::beg);
while(!odb->eof()/*||j<i*/){
*odb>>t>>mar>>mod>>cuz>>n;
m_ob[j++]=Car(t,mar,mod,cuz,n);
}
odb->flush();
if(odb->bad()){cout<<"bad";getch();}
//odb->seekg(0,ios::beg);
char m='y';
while(m=='y'){
system("cls");
cout<<"choose search mode:\n"
<<"1 - search by field \"marka\";"<<endl
<<"2 - search by fields \"marka\" and \"model\"."<<endl;
cin>>temp;
if(temp[1]!='\0'){
cout<<"bad input";getch();continue;
}
switch(temp[0]){
case '1':{
cout<<"Enter the mark of car you want to fined:\n";
cin>>mar;
t=0;
for(j=0;j<i;j++){
if(strcmp(mar,m_ob[j].list.marka)==0){
t++;
m_ob[j].show();
}
}
if(t==0){
cout<<"Sorry! The \""<<mar<<"\" not found.\n";getch();
}
cout<<"Do you want to search another subject?(y/n)\n";
while(1){
cin>>temp;
if(strcmp(temp,"n")==0)
{m='n';
break;}
else if(strcmp(temp,"y")==0)break;
else {cout<<"Bad input\n";getch();}
}
break;
}
case '2':{
cout<<"Enter the mark of car you want to fined:\n";
cin>>mar;
cout<<"Enter the model of car you want to fined:\n";
cin>>mod;
t=0;
for(j=0;j<i;j++){
if(strcmp(mar,m_ob[j].list.marka)==0&&strcmp(mod,m_ob[j].list.model)==0){
t++;
m_ob[j].show();
}
}
if(t==0){
cout<<"Sorry! The \""<<mar<<" "<<mod<<"\" not found.\n";getch();
}
cout<<"Do you want to search another subject?(y/n)\n";
while(1){
cin>>temp;
if(strcmp(temp,"n")==0)
{m='n';
break;}
else if(strcmp(temp,"y")==0)break;
else {
cout<<"Bad input\n";getch();
}
}
break;
}
default:cout<<"Bad input";getch();
}
}
if(odb->good()){cout<<"good";getch();}
//cout<<m_ob[3].id;getch();
delete[] m_ob;
}

Последний раз редактировалось PaPoV; 07.04.2014 в 15:30.
PaPoV вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с указателем Form_13 Общие вопросы Delphi 2 20.12.2011 22:35
Проблема с указателем(с++) Lazy maximka Помощь студентам 1 16.11.2011 01:04
Проблема с указателем novak3 Общие вопросы C/C++ 3 07.05.2011 13:51
Проблема с двойным указателем на указатель на вектор (C++) Angriff Общие вопросы C/C++ 0 22.04.2010 18:23
проблема с указателем на массив Sergey.Voloxov Общие вопросы C/C++ 7 14.03.2010 17:47