Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/56: Рейтинг темы: голосов - 56, средняя оценка - 4.80
3 / 3 / 0
Регистрация: 24.05.2012
Сообщений: 30

Заполнение массива структур из файла и вывод на экран/в файл

30.05.2012, 07:42. Показов 11600. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть структура
C++
1
2
3
4
5
6
7
8
struct tovar
{
    int nomer;
    char naim[10];
    char edizm[10];
    int kolvo;
    int cena;
};
Есть файл с данными структуры
Code
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
92
93
94
95
96
97
98
99
100
1   
jabloki 
kg  
33  
10500
2
apel'sini
kg
25
18000
3
Grushi
kg
25
23000
4
sahar
Upakovki
24
7500
5
med
litry
80
76000
6
Kartofel
tonni
15
3000
7
Ogurci
kg
50
15000
8
Kurica
kg
30
38000
9
Voda
Upakovki
50
6000
10
Hleb
Sht
100
4500
11
Baton
Sht
100
4000
12
Pechen'e
Pachki
35
8000
13
Moloko
Butilki
130
6000
14
Kefir
Butilki
100
8000
15
Smetana
Banki
120
5600
16
Kukuruza
Banki
40
9000
17
Goroshek
Banki
40
5000
18
Makaroni
Kg
60
5500
19
Kolbasa
Kg
60
110000
20
Vetchina
Kg
30
60000
есть 2 варианта функции для чтения из файла
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
void FromFile(tovar* tov)
{
    int i=0;     
       FILE *f;
        if(!(f=fopen("!TovarIn.txt","r"))==NULL)
        {
                printf("ошибка открытия файла\n");
                system ("pause");
                return;
        }
        if(f!=NULL)
        {
            while(!feof(f))
            {
                fscanf(f,"%i",&tov[i].nomer);
                fscanf(f,"%c",&tov[i].naim);
                fscanf(f,"%c",&tov[i].edizm);
                fscanf(f,"%i",&tov[i].kolvo);
                fscanf(f,"%i",&tov[i].cena);
                i++;
            }
        }
        else cout<<"error\n";
        fclose(f);
   }
эта функция вылетает с ошибкой при её вызове.


во второй функции не знаю как заполнить массив структур, теми строками которые считываю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void FromFile(tovar* tov)
{
 
    {
  
  ifstream myfile;
  myfile.open ("d:\\TovarIn.txt", ios::in);
  string line;
  if (myfile.is_open())
  {
    while ( !myfile.eof() )
    {
        getline(myfile,line);
        //cout << line << endl;
    }
 
    myfile.close();
  }
  else cout << "Unable to open file \n"; 
 }
    system("pause");
   }
подскажите пожалуйста что не так...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.05.2012, 07:42
Ответы с готовыми решениями:

Заполнение массива структур из .txt файла (файловый ввод/вывод)
Доброго времени суток! Есть некоторая задача: в файле .txt есть список студентов(ФИО, предмет, оценка) и все это нужно отсортировать(не...

Запись с файла в массив структур + вывод массива на экран
void OUTPUT_clients() { ifstream ifile; ifile.open(&quot;choisestudents.dat&quot;, ios::binary);//&quot;choisestudents.dat&quot; &quot;choise60eur.dat&quot;...

Работа с базами структур - заполнение с клавиатуры и вывод на экран
Пытаюсь разбираться в ассемблере. Не могу понять как работать со структурами. Имеется книга (рудаков,финогенов) но там ничего нету о...

5
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
30.05.2012, 14:04
Лучший ответ Сообщение было отмечено IrineK как решение

Решение

Не по теме:

с ошибкой( вывел



Добавлено через 1 час 35 минут
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
#include "stdafx.h"
#include "iostream"
#include "fstream"
 
 using namespace std;
 
 struct tovar
{
    int nomer;
    char naim[10];
    char edizm[10];
    int kolvo;
    int cena;
};
 
/*ОТОБРАЖЕНИЕ МАССИВА СТРУКТУР*/
 int show(tovar* tov,int size)
 {   
     for (int i=0;i<size;i++) cout<<tov[i].nomer<<"\t"<<tov[i].naim<<"\t\t"<<tov[i].edizm<<"\t\t"<<tov[i].kolvo<<"\t"<<tov[i].cena<<endl;
     return 0;
 }
 
/*ЗАГРУЗКА МАССИВА СТРУКТУР*/
 int FromFile(tovar* tov,int &size)
 {   
     int i=0;
     char S;
     ifstream myfile("d:\\tovar.txt");
     while (!myfile.eof())
     {
      myfile>>tov[i].nomer;   
      myfile>>S;    //Принудительный переход на след строку с захватом одного символа 
      myfile.seekg(ios::cur-2,1); //Костыль. Был захвачен один символ, возвращаем курсор чуть влево
      myfile.getline(tov[i].naim,10);
      myfile.getline(tov[i].edizm,10);
      myfile>>tov[i].kolvo;
      myfile>>tov[i].cena;
      i++;
     }
      myfile.close();
      size=i-1; //size будет нужен для того чтоб указывать размерность массива
     return 0;
 }
 
 int main(void)
 {
     int size=0;
     tovar T1[1000]; //T1 - Массив структур типа tovar в 999 элементов
      FromFile(T1,size); //Загрузка массива структур из файла
       show(T1,size); //Отображение массива структур на экране
      system("PAUSE");
     return 0;
 };
1
3 / 3 / 0
Регистрация: 24.05.2012
Сообщений: 30
31.05.2012, 18:47  [ТС]
Цитата Сообщение от daslex Посмотреть сообщение

Не по теме:

с ошибкой( вывел



Добавлено через 1 час 35 минут
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
#include "stdafx.h"
#include "iostream"
#include "fstream"
 
 using namespace std;
 
 struct tovar
{
    int nomer;
    char naim[10];
    char edizm[10];
    int kolvo;
    int cena;
};
 
/*ОТОБРАЖЕНИЕ МАССИВА СТРУКТУР*/
 int show(tovar* tov,int size)
 {   
     for (int i=0;i<size;i++) cout<<tov[i].nomer<<"\t"<<tov[i].naim<<"\t\t"<<tov[i].edizm<<"\t\t"<<tov[i].kolvo<<"\t"<<tov[i].cena<<endl;
     return 0;
 }
 
/*ЗАГРУЗКА МАССИВА СТРУКТУР*/
 int FromFile(tovar* tov,int &size)
 {   
     int i=0;
     char S;
     ifstream myfile("d:\\tovar.txt");
     while (!myfile.eof())
     {
      myfile>>tov[i].nomer;   
      myfile>>S;    //Принудительный переход на след строку с захватом одного символа 
      myfile.seekg(ios::cur-2,1); //Костыль. Был захвачен один символ, возвращаем курсор чуть влево
      myfile.getline(tov[i].naim,10);
      myfile.getline(tov[i].edizm,10);
      myfile>>tov[i].kolvo;
      myfile>>tov[i].cena;
      i++;
     }
      myfile.close();
      size=i-1; //size будет нужен для того чтоб указывать размерность массива
     return 0;
 }
 
 int main(void)
 {
     int size=0;
     tovar T1[1000]; //T1 - Массив структур типа tovar в 999 элементов
      FromFile(T1,size); //Загрузка массива структур из файла
       show(T1,size); //Отображение массива структур на экране
      system("PAUSE");
     return 0;
 };
не работает данная функция(
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
31.05.2012, 20:58
Это не функция, это код, который содержит множество функций.
Вы думаете на форуме сборище экстрасенсов? если компилятор пишет ошибки, перепишите их.

Возможно у вас файла нет (В моем коде проверки убраны) и если так, то нужно переписать в коде путь к вашему файлу, добавить необходимые проверки на наличие файла.

Вот вам скрин работы Visual Studio 2005.
Миниатюры
Заполнение массива структур из файла и вывод на экран/в файл  
0
3 / 3 / 0
Регистрация: 24.05.2012
Сообщений: 30
31.05.2012, 22:42  [ТС]
Цитата Сообщение от daslex Посмотреть сообщение
Это не функция, это код, который содержит множество функций.
Вы думаете на форуме сборище экстрасенсов? если компилятор пишет ошибки, перепишите их.

Возможно у вас файла нет (В моем коде проверки убраны) и если так, то нужно переписать в коде путь к вашему файлу, добавить необходимые проверки на наличие файла.

Вот вам скрин работы Visual Studio 2005.
да, извините) после того как написал подумал что вы не так поймете)
я имел ввиду только функцию чтения из файла.
вставил в свой код, она не работает...
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <fstream>
#include <string>
using namespace std;
const int n=1;
 
struct tovar
{
    int nomer;
    char naim[10];
    char edizm[10];
    int kolvo;
    int cena;
};
 
 
void vvod(int n,tovar* tov);
//void consol();
void consolVvod(int n,tovar* tov);
void vivodFile(int n,tovar* tov);
void vivodFile();
void vivodEkran(int n,tovar* tov);
//void delElem();
//void clean();
void vyvodElem(int n,tovar* tov);
//void vyvodColich();
//void sdvig();
void FromFile(tovar* tov);
void main()
 
{
    setlocale(LC_ALL,"Russian");
 
    tovar* tov=new tovar[n];
    char deistv;
    //ifstream myfile = new ifstream("TovarIn.txt");
 
 
 
    while (true)
{
    system("cls");      
    cout<<"\n"; 
cout<<"                 |-----|---------------------------------------|\n";
cout<<"                 |  1  |Заполнение очереди:                    |\n";
cout<<"                 |-----|---------------------------------------|\n";
cout<<"                 |  2  |Удаление элемента из очереди;          |\n";
cout<<"                 |-----|---------------------------------------|\n";
cout<<"                 |  3  |Очистка очереди;                       |\n";
cout<<"                 |-----|---------------------------------------|\n";
cout<<"                 |  4  |Вывод элементов содержащихся в очереди;|\n";
cout<<"                 |-----|---------------------------------------|\n";
cout<<"                 |  5  |Вывод количества элементов в очереди;  |\n";
cout<<"                 |-----|---------------------------------------|\n";
cout<<"                 |  6  |Сдвиг элементов очереди к началу;      |\n";
cout<<"                 |-----|---------------------------------------|\n";
cout<<"                 |  0  |Выход;                                 |\n";
cout<<"                 |-----|---------------------------------------|\n";
cout<<"\n";
cin>>deistv;
switch(deistv)
    {
    case '1': vvod(n,tov);break;
//  case '2': delElem();break;
//  case '3': clean(); break;
    case '4': vyvodElem(n,tov);break;
//  case '5': vyvodColich();break;
//  case '6': sdvig();break;
    case '0': exit(0);
    default : cout <<"\nНеверный ввод, повторите \n";
    system ("pause");
    }
}
    
}
 
 
void vvod(int n,tovar* tov)
{
    
    char vibor;
    cout<< " 1 - с консоли \n";
    cout<< " 2 - из файла \n" ;
    cin>>vibor;
    switch(vibor)
    {
    case '1': consolVvod(n,tov);break;
    case '2': FromFile(tov);break;
    }
}
 
void consolVvod(int n,tovar* tov)
{
 
    //cout<<"Введите размер массива:" ;cin>>n;
//    tovar* tov=new tovar[n];
    for(int i=0;i<n;i++)
    {
        cout<<"Введите номер: ";cin>>tov[i].nomer;
        cout<<"Введите наименование: ";cin>>tov[i].naim;
        cout<<"Введите единици измерения: ";cin>>tov[i].edizm;
        cout<<"Введите количество: ";cin>>tov[i].kolvo;
        cout<<"Введите цену: ";cin>>tov[i].cena;
        cout<<endl;
    }
}
 
void FromFile(tovar* tov,int &size)
 {   
     int i=0;
     char S;
     ifstream myfile("d:\\tovar.txt");
     while (!myfile.eof())
     {
      myfile>>tov[i].nomer;   
      myfile>>S;    //Принудительный переход на след строку с захватом одного символа 
      myfile.seekg(ios::cur-2,1); //Костыль. Был захвачен один символ, возвращаем курсор чуть влево
      myfile.getline(tov[i].naim,10);
      myfile.getline(tov[i].edizm,10);
      myfile>>tov[i].kolvo;
      myfile>>tov[i].cena;
      i++;
     }
      myfile.close();
      size=i-1; //size будет нужен для того чтоб указывать размерность массива
 }
 
 
void vyvodElem(int n,tovar* tov)
{
 
    char VibViv;
    cout<< "Выберите куда выводить элементы \n";
    cout<< "1 - на экран \n";
    cout<< "2 - в файл \n";
    cin>>VibViv;
    switch(VibViv)
    {
    case '1': vivodEkran(n,tov);break;
    case '2': vivodFile(n,tov);break;
    }
}
void vivodEkran(int n,tovar* tov)
{
    cout<<"Список товара:\n";
    for(int i=0;i<n;i++)
    {
      cout<<"Номер товара:     |"<<tov[i].nomer<<";\n";
      cout<<"Наименование:     |"<<tov[i].naim<<";\n";
      cout<<"Еденицы измерения:|"<<tov[i].edizm<<";\n";
      cout<<"Количество:       |"<<tov[i].kolvo<<";\n";
      cout<<"Цена:             |"<<tov[i].cena<<";\n";
      cout<<endl;
    }
    system("pause");
}
void vivodFile(int n,tovar* tov)
{
    FILE *f;
 f=fopen("TovarOut.txt","w");   
for (int i = 0; i < n; i++)
        {
            fprintf(f,"%c Номер товара:     |"); fprintf(f,"%i",tov[i].nomer);
            fprintf(f,"\n");
            fprintf(f,"%c Наименование:     |");fputs(tov[i].naim,f);
            fprintf(f,"\n ");
            fprintf(f,"%c Еденицы измерения:|");fputs(tov[i].edizm,f);
            fprintf(f,"\n ");
            fprintf(f,"%c Количество:       |");fprintf(f,"%i",tov[i].kolvo);
            fprintf(f,"\n ");
            fprintf(f,"%c Цена:             |");fprintf(f,"%i",tov[i].cena);
            fprintf(f,"\n ");
            fprintf(f,"\n ");
        }
fclose(f);
}
kursach1.obj : error LNK2019: unresolved external symbol "void __cdecl FromFile(struct tovar *)" (?FromFile@@YAXPAUtovar@@@Z) referenced in function "void __cdecl vvod(int,struct tovar *)" (?vvod@@YAXHPAUtovar@@@Z)
1>D:\Витя\учёба\курсовая\kursach1\Debug\ kursach1.exe : fatal error LNK1120: 1 unresolved externals
вот ошибка.

visual studio 2010
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
01.06.2012, 00:58
Цитата Сообщение от Kovrik15 Посмотреть сообщение
void FromFile(tovar* tov);
C++
1
void FromFile(tovar* tov, int &);  //РАЗ

Цитата Сообщение от Kovrik15 Посмотреть сообщение
case '2': FromFile(tov);break;
C++
1
 case '2': FromFile(tov,n);break;  //ДВА
Строки 30 и 90 вашего кода
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.06.2012, 00:58
Помогаю со студенческими работами здесь

Заполнение массива структур из файла
Файл имеет вид: 1 Sidorov Moscow 3 4 2 Petrov St.Peterburg 5 31 3 Falin Chetai 24 32 4 Sokolov Ufa 32 34 5 Demyanov Moscow 4 6...

Заполнение массива структур из файла
Здравствуйте появилась проблема - никак не могу найти, как заполнить массив структур из файла. Как заполнить файл я разобрался, а наоборот...

Заполнение массива структур из файла
Необходимо заполнить структуру из файла. На эту тему нашел кучу тем и кучу разных неработающих кодов-) В общем пришел к следующему коду,...

Заполнение динамического массива структур из бинарного файла
Здравствуйте! Нужна помощь в реализации вот такого алгоритма: предположим, что изначально мы создали динамический массив структур и...

Вывод содержимого массива структур на экран
Сваял структуру: #include &lt;stdio.h&gt; #include &lt;string.h&gt; #define SIZE 25 struct date_by_date { char girlfriend ; char meeting...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru