Форум программистов, компьютерный форум CyberForum.ru

Вывод данных из текстового фаила - C++

Восстановить пароль Регистрация
 
LeeZa
 Аватар для LeeZa
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 43
30.09.2013, 15:30     Вывод данных из текстового фаила #1
Прога работает, да не совсем. Почему-то не передает из фаила описание деталей. Прошу помочь разобраться.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string.h>
#include <iomanip>
using namespace std;
 
// Класс "Деталь"
 
class Detal{ public:
    char nazvanie[80];
    float ves;
    int kolichestvo;
    char mesto[20];
    };
 
// Класс "Стеллаж"
class Stellaj{ public:
    Detal detali[30];
    char nazvanie[20];
    char no_sklad[10];
 
 
int ReadF()
    { int i; char L[25];
    cout << "Vvedite puti k failu : ";
    gets(L);
    ifstream out_file(L, ios::out);
    if (out_file.fail()) cerr << "Error in opening stellaj.txt" << endl;
    else
    {if (!out_file.is_open()) cout << "Empty file";
    else{
     //Чтение названия stelaja
    cout << "STELAJ : ";
    if ((! out_file.eof()) && (! out_file.fail()))
    {
    out_file.getline(nazvanie, sizeof(nazvanie)) ;
    if (! out_file.fail()) cout << nazvanie << endl;}
 
        //Чтение No_склада
    cout << "SKLAD : ";
    if ((! out_file.eof()) && (! out_file.fail()))
    {
    out_file.getline(no_sklad, sizeof(no_sklad)) ;
    if (! out_file.fail()) cout << no_sklad << endl;}
 
 
ifstream input_file("L") ;
        //Чтение деталей в стелаже
    cout << endl << "----------------------------------------------------------------------------" << endl;
    cout << "No | Naimenovanie detali: | Ves: | Kol-vo :  |  Polka : " << endl;
    cout << "----------------------------------------------------------------------------" << endl;
    while ((! out_file.eof()) && (! out_file.fail()))
    {
    out_file >> detali[i].nazvanie;
    out_file >> detali[i].ves;
    out_file >> detali[i].kolichestvo;
    out_file >> detali[i].mesto;
 
    if (! out_file.fail())
    cout << setiosflags(ios::left) << setw(3) << i+1 << "| " << setw(20) << setiosflags(ios::left) << detali[i].nazvanie << " | " << setw(5) << setiosflags(ios::left) << detali[i].ves;
    cout << " | " << setw(5)<< setiosflags(ios::left) << detali[i].kolichestvo << " | " << setw(15) << setiosflags(ios::left) << detali[i].mesto << endl;
 
    i++;
    }
    cout << "----------------------------------------------------------------------------";
    if (! out_file.fail()) cout << endl << endl << "No sklada: " << no_sklad << endl;
    }
    out_file.close();
    }
    getch();
    return i;}
 
};
 
 
Stellaj *create(int n)
{   Stellaj *x;
    x=new Stellaj[n];
    return x;};
 
 
int main () {
    Stellaj g;
    int  A=100500, B=100;
    printf("PRIVET! EA TVOEA PROGA! EA HO4U RA-BO-TA-TI !! %d \n", A+B );
    g.ReadF();
    getchar();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
30.09.2013, 16:22     Вывод данных из текстового фаила #2
пример входного файла если можно плз. но на вскидку.
проблем в разделителях между данными. Если я правильно понял то используется символ |, однако для стандартного оператора считывания из потока разделителями являются пробел и конец строки
Более того если разделитель будет " | " (вместе с пробелами), и считывается
Цитата Сообщение от LeeZa Посмотреть сообщение
out_file >> detali[i].nazvanie;
out_file >> detali[i].ves;
out_file >> detali[i].kolichestvo;
out_file >> detali[i].mesto;
То в название пойдет название, в вес символ | в количество пойдет вес и соответствено в место кажется тоже просто символ |, т.к. именно пробелы разобьют строку на составляющие.
LeeZa
 Аватар для LeeZa
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 43
30.09.2013, 21:03  [ТС]     Вывод данных из текстового фаила #3
В фаиле было это:
-------------

StellajZ
abc_sklad
Velosiped
3.4
2
polka7

-------------
названия стеллажа (StellajZ) и склада (abc_sklad) считались, в остальном проблемы.
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
30.09.2013, 21:40     Вывод данных из текстового фаила #4
Лишний код
C++
1
ifstream input_file("L") ;
У Вас случаем прога вообще не падает когда начинает считывать детали?
Если нет - везет .
Т.к. код реально рабочий но есть одно но
При считывании деталей вы используете переменную i. Однако вы ее нигде не инициализируете, полагаясь на то что изначально автоматом она будет проинициализированна, но по факту для переменной просто выделяется память, а вот какое там значение будет - не известно. Поэтому при объявлении допишите код чтобы она иницилизировалась. например так
C++
1
2
3
...
int ReadF()
{ int i(0);...
По идее должно все заработать.
Но есть еще одна неточность.
Прога упадет, если в файле будет прописано больше чем 30 деталей.
Поэтому в цикл считывания деталей целесообразно добавить проверку
C++
1
while ((! out_file.eof()) && (! out_file.fail())&&(i<30))
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.09.2013, 21:45     Вывод данных из текстового фаила #5
Это как?
C++
1
ifstream out_file(L, ios::out);
ifstream и ios::out?
LeeZa
 Аватар для LeeZa
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 43
30.09.2013, 23:23  [ТС]     Вывод данных из текстового фаила #6
Благодарю за помощь!
Еще один (возможно, глупый) вопрос: можно ли как-то определить количество строк в фаиле ???
(т.к. программа выдает ошибку, как только заканчивает выполнять функцию. Думаю, нужно задать условие не до <30, а до < M, количество описанных деталеи в фаиле.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2013, 23:28     Вывод данных из текстового фаила
Еще ссылки по теме:

C++ Вывод на экран данные из текстового файла
C++ Вывод текстового сообщения на консоль
C++ Вывод карты из текстового файла

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
30.09.2013, 23:28     Вывод данных из текстового фаила #7
на вскидку самый дурацкий способ прочитать их все и посчитать
но!

Цитата Сообщение от LeeZa Посмотреть сообщение
class Stellaj{ public: Detal detali[30];
Внутри самого класса у вас фиксированное количество деталей 30
поэтому и ставилось ограничение 30
Более того у вас масса ограничений на строчные данные.
отслеживайте в отладке что именно является причиной падения программы и исправляйте

Не забывайте что память не резиновая и сколько выделили под переменную столько приходится и использовать или выделять больше
Yandex
Объявления
30.09.2013, 23:28     Вывод данных из текстового фаила
Ответ Создать тему
Опции темы

Текущее время: 11:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru