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

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

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

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

27.05.2011, 01:24. Просмотров 1160. Ответов 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++
Здравствуйте! Никак не получается выделить динамическую память под каждую структуру из файла, учитывая, что я не знаю сколько структур в...

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

Нужен иной метод чтения структуры из файла - 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; ...

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

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

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

Открытие файла для чтения/записи - C++
Помогите реализовать открытие файла под компилятор g++ или DevC++ вечно ругается на std.. using namespace std; не помогает. как...

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

составить программу для чтения файлов - C++
Составить программу для реализации того или иного режима работы с файлами ( чтение, запись, открытие, закрытие файла и т.п. )

Функция для чтения из файла в матрицу - C++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;fstream&gt; using namespace std; void setvector(vector&lt;vector&lt;int&gt; &gt; matrix,...


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

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

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