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

scanf для чтения структуры - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
gimnazistka
Сообщений: n/a
27.05.2011, 01:24     scanf для чтения структуры #1
Возникли вот какие вопросы, прошу вас ткнуть носом, ув. форумчане... Есть структура вида
Bash
1
2
3
NETBOOK  AMD  ATI  500  WINDOWS  325
NOUTBOOK INTEL  NVIDIA  750  LINUX  250
PC  AMD  NVIDIA  320  WINDOWS  325
Ума не приложу, как считать данную структуру через scanf. Вот какие наработки пока есть
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
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <ctime>
#include <iomanip>
#include "stdio.h"
#include "windows.h"
 
using namespace std;
 
int kolvozapis;
 
void sozd();
void vvod();
void pokaz();
void poisk();
void udalenie();
 
struct computer
{
    char TIP [10]; int COST,HDD; char CPU [10]; char VGA [10]; char OS [10];
 
} comp [50];
 
void main()
{
        setlocale (0,"");
 
char a;
 
        while( 1 )
        {
                cout << "\tГЛАВНОЕ МЕНЮ\n";
                cout << "1-Создать файл\n\r2-Добавить запись в файл\n\r3-Показать записи\n\r4-Поиск\n\r5-Удаление\n\r6-Выход\n";
 
                cin >> a;
 
                switch( a )
                {
                        case '1':
                                sozd();
                                break;
                        case '2':
                                vvod();
                                break;
                         case '3':
                                pokaz();
                                break;
                        //case '4':
                        //        /*poisk();
                        //        break;
                        //case '5':
                        //        udalenie();
                        //        break;*/
                        case '6':
                                exit(1);
                }
        }
}
 
void sozd ()
{
        cout << "Создан файл - out.txt";
        cout << "\n\Введите количество записей, которые будут помещены в файл ";
        cin >> kolvozapis;
 
        FILE *my;
        my = fopen( "out.txt", "w+" );
        for( int i = 0; i < kolvozapis; i++ )
        {
                cout << "\n Введите тип ПК (PC/NETBOOK/NOUTBOOK) ";
                cin >> comp[i].TIP;
                cout << "\n Введите производителя процессора (INTEL/AMD) ";
                cin >> comp[i].CPU;
                cout << "\n Введите производителя видео (ATI/NVIDIA) ";
                cin >> comp[i].VGA;
                cout << "\n Введите объем жесткого диска  ";
                cin >> comp[i].HDD;
                cout << "\n Введите тип операционной системы (WINDOWS/LINUX) ";
                cin >> comp[i].OS;
                cout << "\n Введите желаемую стоимость ";
                cin >> comp[i].COST;
                fprintf(my,"%s %s %s %d %s %d\n",comp[i].TIP,comp[i].CPU,comp[i].VGA,
                             comp[i].HDD,comp[i].OS,comp[i].COST);
                system ("cls");
        };
        fclose( my );
}
 
void vvod()
{
int n, i;
        cout << "\n\Введите количество добавляемых записей ";
        cin >> n;
        FILE *my;
        my = fopen( "out.txt", "a+" );
        for( i = 0; i < n; i++ )
        {
                cout << "\n Введите тип ПК (PC/NETBOOK/NOUTBOOK) ";
                cin >> comp[i].TIP;
                cout << "\n Введите производителя процессора (INTEL/AMD) ";
                cin >> comp[i].CPU;
                cout << "\n Введите производителя видео (ATI/NVIDIA) ";
                cin >> comp[i].VGA;
                cout << "\n Введите объем жесткого диска  ";
                cin >> comp[i].HDD;
                cout << "\n Введите тип операционной системы (WINDOWS/LINUX) ";
                cin >> comp[i].OS;
                cout << "\n Введите желаемую стоимость ";
                cin >> comp[i].COST;
                fprintf(my,"%s %s %s %d %s %d\n",comp[i].TIP,comp[i].CPU,comp[i].VGA,
                             comp[i].HDD,comp[i].OS,comp[i].COST);
                system("cls");
        };
        fclose( my );
}
 
void pokaz ()
{
    cout << "Выбран режим чтения данных из файла";
    FILE *my;
        my = fopen( "out.txt", "r+" );
        for( int i = 0; i < 2; i++ )
        {
            fscanf(my,"%s %s %s %d %s %d",&comp[i].TIP,&comp[i].CPU);
            cout<<comp[i].TIP<<comp[i].CPU;} // например так начать читать?
}
В цикле пробовать считывать данные, но как узнать наперед, сколько там может быть полей?
И попутно вопрос, стоит ли в файл вносить записи вида - тип ПК, тип ЦПУ и т.п...
Или просто в нем хранить данные, а выводить уже в консоль таким образом
C++
1
cout<<"Тип ПК"<<comp.TIP
Не приходилось просто до сих пор работать с структурами, а большинство примеров не робит в VS 2010...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2011, 01:24     scanf для чтения структуры
Посмотрите здесь:

C++ Нужен иной метод чтения структуры из файла
C++ функция для чтения из файла в матрицу
Открытие бинарного файла для чтения C++
C++ Драйвер для чтения CD-ROM
Как открыть файл одновременно для чтения и для записи? C++
C++ Окошко для printf/scanf появляется и сразу исчезает
C++ Выделение динамической памяти для чтения каждой структуры из файла
C++ Каким образом после чтения из файла, узнать позицию для чтения следующего куска байт

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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