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

Чтение/запись файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти наибольшее из значений элементов, расположенных в зарисованых частях матриц Миниатюры http://www.cyberforum.ru/cpp-beginners/thread790557.html
Дана квадратная матрица порядка n (n строк, n столбцов). Найти наибольшее из значений элементов, расположенных в зарисованых частях матриц
C++ read(); write(); Вот такая вот небольшая программка fstream myFileReader("hardware.dat", ios::in | ios::out); int example = 1; myFileReader.write((char*) &example, sizeof(example)); myFileReader.read((char*) &example, sizeof(example)); cout << example; У меня она выводит бред типа -803434434; только у меня такое?( просто боюсь, что на моём компьютере что-то со шрифтами, либо в коде я напортачил.... http://www.cyberforum.ru/cpp-beginners/thread790554.html
Обработка файлов. Функция seekg(); C++
ifstream fileReader("sdf.txt"); int a; while (fileReader >> a) { ...; } А теперь, чтобы повторить данный while нужно написать fileReader.clear(); fileReader.seekg(0); Так вот, почему не достаточно одного seekg(0)? Эта функция перемещает ползунок чтения на начало файла. А вот функция clear() устанавливает флаг ошибки в положение "нет ошибки" и я не пойму зачем нам это нужно, если и функции...
C++ C++ и асемблерные вставки.Как это просиходт синтаксически?
Я искал в великом Гугле,Мне интересно как это происходит вставки в С++, Для этого нужно ставить MASM или все интегрировано в visual studio(Инсталирована Visual Studio 2010). Люди посоветуйте в какую сторону двигаться.
C++ Как передать ссылку на объект в класс http://www.cyberforum.ru/cpp-beginners/thread790522.html
Здравствуйте! Подскажите, пожалуйста, почему не работает: log.h class LogClass { public: bool InitializeLog(); void Write(char*); private: std::ofstream m_fout;
C++ Подсчет елементов в одномерном динамическом массиве (есть решение на C#.NET) Здравствуйте, у меня вопрос: если я в консоль введу массив символов, к примеру: 0,1,4,в,н,ш,с,4,8; как можно будет подсчитать их количество, а если без вопроса то вопрос один: как подсчитать их количество не смотря откуда они берутся, может есть что-то наподобии ф-ции length? код C# (тут, конечно, подсчитывается количество цифр в числе, но все же): using System; namespace... подробнее

Показать сообщение отдельно
kebal
9 / 9 / 0
Регистрация: 02.11.2012
Сообщений: 153
20.02.2013, 03:49     Чтение/запись файла
Вот сделал такую прогу. Очень простая. Создает файл, где есть 100 полей.
Каждое поле это строка из индекса, названия, кол-ва (например тут инструментов), цены.
например
5 Молоток 10 50.50
И реализовал простенькие методы для работы.
Но почему-то не работает 5 метод. Когда я создаю два объекта
1 молоток 2 4
2 тяпка 6 8
А после этого изменяю кол-во молотков с двух на любое число, которое имеет более одного знака, то это каким-то образом влияет на тяпку и при выводе печатает полный бред. При этом изменение названия молотка либо же цены молотка проходит абсолютно нормально. При этом все эти три метода почти полные копии друг друга и поэтому я вот всё пытаюсь найти где же ошибка. Кто даст ответ или натолкнет проплюсую все ответы в этой теме, слишком уж много кода тут.
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
// Инвентаризация.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <fstream>
#include <iostream>
using namespace std;
 
struct Instrument {
    int num;
    char instName[30];
    int kolvo;
    double price;
};
 
int getChoice();
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    fstream myFileReader("hardware.dat", ios::in | ios::out);
 
    if (! myFileReader) {
        cerr << "Файл не может быть открыт" << endl;
        system("pause");
        exit(1);
    }
 
    Instrument my = {0, "", 0, 0.0};
 
    for (int i = 0; i < 100; i++) {
        myFileReader.write((char *) &my, sizeof(Instrument));
    }
    myFileReader.flush();
    int choice;
    while ((choice = getChoice()) != 7) {
        switch(choice) {
            //вставляет новый инструмент
        case(1):
            {
                cout << "Введите индекс, название, кол-во, цену. " << endl;
                cin >> my.num >> my.instName >> my.kolvo >> my.price;
                myFileReader.seekg((my.num - 1) * sizeof(Instrument));
                Instrument temp;
                myFileReader.read((char *) &temp, sizeof(Instrument));
                if (temp.num == 0) {
                    myFileReader.seekp((my.num - 1) * sizeof(Instrument));
                    myFileReader.write((char *) &my, sizeof(Instrument));
                    myFileReader.flush();
                }
                else
                    cout << "Данный счёт уже существует!" << endl;
                break;
            }
            //печатает уже введенные инструменты
        case(2):
            {
                cout << "Полный список: " << endl;
                myFileReader.seekg(0);
                myFileReader.read((char *) &my, sizeof(Instrument));
                while (! myFileReader.eof()) {
                    if (my.num != 0) {
                        cout << my.num << ' ' << my.instName << ' ' << my.kolvo << ' ' << my.price << endl;
                    }
                    myFileReader.read((char *) &my, sizeof(Instrument));
                }
                break;
            }
            //удаляет инструмент
        case(3):
            {
                cout << "Введите номер записи, которую вы хотите удалить: " << endl;
                int num;
                cin >> num;
                myFileReader.seekp((num - 1) * sizeof(Instrument));
                Instrument temp = {0, "", 0, 0.0};
                myFileReader.write((char *) &temp, sizeof(Instrument));
                myFileReader.flush();
                break;
            }
            //изменяет имя инструмента
        case(4):
            {
                cout << "Введите номер записи, в которой вы хотите сделать изменение: " << endl;
                int num;
                cin >> num;
                myFileReader.seekg((num - 1) * sizeof(Instrument));
                myFileReader.read((char *) &my, sizeof(Instrument));
                if (my.num == 0) {
                    cout << "Такой записи не существует" << endl;
                    break;
                }
                cout << "Введите новое название: ";
                cin >> my.instName;
                myFileReader.seekp((num - 1) * sizeof(Instrument));
                myFileReader.write((char *) &my, sizeof(Instrument));
                myFileReader.flush();
                break;
            }
            //изменяет кол-во инструментов
        case(5):
            {
                cout << "Введите номер записи, в которой вы хотите сделать изменение: " << endl;
                int num;
                cin >> num;
                myFileReader.seekg((num - 1) * sizeof(Instrument));
                myFileReader.read((char *) &my, sizeof(Instrument));
                if (my.num == 0) {
                    cout << "Такой записи не существует" << endl;
                    break;
                }
                cout << "Введите новое кол-во: ";
                cin >> my.kolvo;
                myFileReader.seekp((num - 1) * sizeof(Instrument));
                myFileReader.write((char *) &my, sizeof(Instrument));
                myFileReader.flush();
                break;
            }
            //изменяет стоимость
        case(6):
            {
                cout << "Введите номер записи, в которой вы хотите сделать изменение: " << endl;
                int num;
                cin >> num;
                myFileReader.seekg((num - 1) * sizeof(Instrument));
                myFileReader.read((char *) &my, sizeof(Instrument));
                if (my.num == 0) {
                    cout << "Такой записи не существует" << endl;
                    break;
                }
                cout << "Введите новую стоимость: ";
                cin >> my.price;
                myFileReader.seekp((num - 1) * sizeof(Instrument));
                myFileReader.write((char *) &my, sizeof(Instrument));
                myFileReader.flush();
                break;
            }
        default:
            cout << "Неправильное число." << endl;
            break;
        };
        //myFileReader.flush();
        myFileReader.clear();
    }
 
    system("pause");
    return 0;
}
 
int getChoice() {
    cout << "Введите число:" << endl
         << "1 для ввода нового инструмента;" << endl
         << "2 для получения всего списка;" << endl
         << "3 для удаления записей;" << endl
         << "4 изменить название;" << endl
         << "5 изменить количество;" << endl
         << "6 изменить стоимость;" << endl
         << "7 для завершения программы;" << endl;
    int choice;
    cin >> choice;
    return choice;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru