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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2009, 18:48   #1
Zaya007
 
Аватар для Zaya007
 
Регистрация: 12.03.2009
Сообщений: 9
Восклицание Чтение данных из файла в С++

Очень нужна помощь:
никак не получается написать функцию чтения из файла на С++
Есть на С, но хочу на С++, все никак не выходит
Вот что есть на С:
Код:
Bus *readBD(char *fname)
{
    FILE *inf; //указатель на структуру FILE
    Bus x; //буферная переменная структуры Bus
    Bus *buses=0; //если было что-то введено очищаем
    if ((inf=fopen(fname,"r"))==NULL)
      {
        printf("Not file %s\n",fname);
        return 0;
      }
   // fseek(inf,0,0); //задаем текущее положение курсора в начале
    while (!feof(inf))
      {
        fscanf(inf," %s ",&x.fio); //s-строковый тип
        fscanf(inf," %d ",&x.mnomer); //d-десятичный вид
        fscanf(inf," %s ",&x.nombus);
        fscanf(inf," %s ",&x.depo);
        buses=add(buses,x); //добавление
      }
    Print(buses); //функция печать
    fclose(inf); //закрывает поток ввода/вывода
    return buses;
}
а я хочу через
Код:
ifstream inf(fname, ios_base::in);
Очень буду рада, если кто-то поможет, а то я вся замучилась
Zaya007 вне форума Ответить с цитированием
Старый 16.03.2009, 18:59   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А что не получается?
Цитата:
все никак не выходит
покажите то, что написали. Так ведь не понять, что конкретно у вас не выходит.

ps Я предполагаю, что вы уже изучили материал по работе с потоками (fstream).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.03.2009, 19:02   #3
Cdevelop
Пользователь
 
Регистрация: 14.03.2009
Сообщений: 43
По умолчанию

считывание из файла
Код:
ifstream input_file("root.txt");
Cdevelop вне форума Ответить с цитированием
Старый 16.03.2009, 19:05   #4
Zaya007
 
Аватар для Zaya007
 
Регистрация: 12.03.2009
Сообщений: 9
По умолчанию

не совсем все поняла, написала на подобии
Код:
      Bus *Read_file(char *fname)
{
      ifstream fin(fname, ios_base::in);
      Bus x;
      Bus *buses;
      if (!fin)
      {
        cout<<"Not file "<<fname<<endl;
        return 0;
      }
  
       while (!fin.eof())
       {
        fin>>x.fio;
        fin>>x.mnomer;
        fin>>x.nombus;
        fin>>x.depo;
        x=x->next;
        buses=add(buses,x);
       }
    Print(x);
    fin.close();
    return buses;
Zaya007 вне форума Ответить с цитированием
Старый 16.03.2009, 19:11   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Zaya007, в принципе, похоже на правду.
Только вот этого:
Код:
  x=x->next;
я в коде на Си не увидел.

А что не работает?
Просто т.к. это не полный код, то и проверить проблематично.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.03.2009, 19:14   #6
Zaya007
 
Аватар для Zaya007
 
Регистрация: 12.03.2009
Сообщений: 9
По умолчанию

имя файла у меня вводится с клавиатуры
а ошибку выводит вот здесь:
Код:
  
fin>>x.fio;
fin>>x.mnomer;
fin>>x.nombus;
fin>>x.depo;
вернее все запускается, но когда пытаюсь прочтитать из файла все вылетает!
Код:
    ifstream fin(fname, ios_base::in);
    
    Bus x;
  
    Bus *buses;
    if (!fin)
    {
        cout<<"Not file "<<fname<<endl;
        return 0;
    }
  
    while (!fin.eof())
    {
        fin>>x.fio;
        fin>>x.mnomer;
        fin>>x.nombus;
        fin>>x.depo;
        buses=add(buses,x);
      
    }
    Print(buses);
    fin.close();
    return buses;
   
}

Последний раз редактировалось Stilet; 17.03.2009 в 08:08.
Zaya007 вне форума Ответить с цитированием
Старый 16.03.2009, 19:22   #7
Cdevelop
Пользователь
 
Регистрация: 14.03.2009
Сообщений: 43
По умолчанию

Пример:
Код:
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
	ifstream input_file("root.txt");
	char name[255];
	while(!input_file.eof())
	{
	input_file.getline(name,sizeof(name));
	cout<<name<<endl;
	}

	system("pause");
}
Cdevelop вне форума Ответить с цитированием
Старый 16.03.2009, 19:24   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Zaya007, хорошо бы увидеть полный код.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 17.03.2009, 08:04   #9
Zaya007
 
Аватар для Zaya007
 
Регистрация: 12.03.2009
Сообщений: 9
По умолчанию

Sazary, вот код:
Вложения
Тип файла: doc read.doc (39.0 Кб, 40 просмотров)
Zaya007 вне форума Ответить с цитированием
Старый 17.03.2009, 21:00   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Zaya007, собственно, у меня программа не вылетает, хоть и работает, скажем так, нехорошо.
Например, при выводе из файла, последнюю строчку дублирует, а в начале вообще выводит какой-то мусор. Думаю, проблема здесь в функции add.
И если открыть файл (после записи в него), то видно, что там много чего лишнего.

А почему бы вам, раз вы работаете со структурой, не записывать в файл сами структуры? Я бы именно так и сделал.

Еще замечу, что вот такая запись:
Код:
 cin>>dx.fio;
  dx.fio[20]='\0';
не совсем верна. Ведь если ввести строку длиной меньше 20-ти символов, то, опять же, запишется мусор.

В функции add, по-моему, многовато указателей.
Сейчас нет времени глубоко вникать.
Вот, посмотрите, если интересно. Прикрепляю маленький пример (добавление, вывод на печать), писал недавно. Может, чем-нибудь поможет.
Вложения
Тип файла: txt spis.txt (584 байт, 160 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла pautina Общие вопросы Delphi 8 23.01.2009 15:48
Чтение данных из файла Excel в C++Builder Max2114 C++ Builder 6 15.01.2009 11:32
Чтение из файла e@gle Общие вопросы Delphi 3 14.12.2008 17:21
Чтение файла [Smarik] Помощь студентам 8 28.04.2008 22:15
Чтение из файла... Bill Gates Общие вопросы Delphi 3 22.03.2008 22:13