Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
gimnazistka
#1

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

27.05.2011, 01:24. Просмотров 1204. Ответов 0
Метки нет (Все метки)

Возникли вот какие вопросы, прошу вас ткнуть носом, ув. форумчане... Есть структура вида
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++
Здравствуйте! Никак не получается выделить динамическую память под каждую структуру из файла, учитывая, что я не знаю сколько структур в...

Как поместить поле структуры в scanf() - C++
Здравствуйте, уважаемые форумчане! Недавно написал несложную программу с использованием структур, но не смог заменить ввод/вывод на функции...

Каким образом после чтения из файла, узнать позицию для чтения следующего куска байт - C++
Здравствуйте, задача такова есть файл, размером 1000 байт, нужно открыть его считать 100 байт, после чтения закрыть. Потом опять открыть...

Нужен иной метод чтения структуры из файла - C++
Это то что у меня есть на данный момент, но судя по сегодняшней лекции нужно еще сделать тожесамое но уже читая не элементы структуры а...

Scanf() для строки любого размера - C++
Здравствуйте! Проблема следующая: нужно реализовать ввод и вывод с клавиатуры текста при помощи функций scanf() и printf(). Я знаю как это...

Окошко для printf/scanf появляется и сразу исчезает - C++
вот код моей программы: #include &quot;stdafx.h&quot; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2011, 01:24
Привет! Вот еще темы с ответами:

Как открыть файл одновременно для чтения и для записи? - C++
Делаю вот так, но ничего не получается.:( std::fstream inOutCredit(&quot;credit.dat&quot;, std::ios::ate | std::ios::binary); if...

Не открывается файл для чтения - C++
Не могу разобраться с кодом , не получается прописать входной фаил , не принимает его .. #include &lt;stdio.h&gt; #include &lt;math.h&gt; ...

Драйвер для чтения CD-ROM - C++
Есть код программы, которая должна считывать данные с CD-ROM'а. Скажите, он правильный или нет? Просто меня уверяют, что не правильный: ...

Необходим материал для чтения и практики - C++
Всем доброго! Я почитал немало книг, перелопатил сайтов с практикой и видео по С++. Наступил какой-то период когда читай либо беру слишком...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru