Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Интерпретация данных для записи в файл 
V
    Опции темы
Xenon
Дата 30.3.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 19
Всего: 50



Night_xxx, переписал ... У тебя жутко спроектировано, если честно ... Задумайся smile Хотя бы обрати внимание на циклы опроса пользователя - do { ... } while(...); У тебя там очень своеобразная логика smile
PS. А чего тебе мешает пользоваться string?
Код

#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>

void write();
void read();
void menu();

char filename[81];
int recsize = 20*sizeof(char)+sizeof(int);

using std::cout;
using std::cin;
using std::fstream;
using std::ios;
using std::endl;

fstream fbin;

int main() 
{     
    printf("Vvedite imya faila dla zapisi: ");
    cin.getline(filename,80);
    fbin.open(filename, ios::binary | ios::in | ios::out);
    if(!fbin)
    {
        cout << "\aFail " << filename << " ne bil uspershno otkrit";
        return -1;
    }
    menu();
    fbin.close();
    return 0;
}

void menu()
{
    system ("cls");
    int choice = 0;
    cout << "\n\n\t\t*************MENU**************";
    cout << "\n\n\t\tZapicati v fail   ------ PRESS 1"; 
    cout << "\n\n\t\tProchitati zapici ------ PRESS 2"; 
    cout << "\n\n\t\tViiti iz programmi------ PRESS 3";
    cout << "\n\n\t\tVash vibor  ";
    cin >> choice;
    switch(choice)
    {
    case 1: write();
        break;
    case 2: read();
        break;
    case 3: exit(0);
        break;
    default:cout << "Nepravilnij vibor";
        break;
    }
}

void write()
{
    char choice = 'y';
    int n;
    char name[20];
    int age;
    do
    {
        cout << "\nVvedite nomer dla zapici ";
        cin >> n;
        cout << "Name - "; 
        cin >> name;
        cout << "Age - "; 
        cin >> age;
        fbin.seekg(recsize*n,ios::beg);
        fbin.write(name,sizeof(char)*sizeof(name));
        fbin.write(reinterpret_cast<char*>(&age),sizeof(int));
        fbin.clear();
        cout << "Prodoljiti? (y/n)"; 
        cin >> choice;
    }while(choice != 'n');
    menu();
}

void read()
{
    char choice = 'y';
    char name[20];
    int age;
    int n;
    do
    {
        cout << "\nVvedite nomer otkuda budem 4itati dannnie: "; 
        cin >> n;
        fbin.seekg(n*recsize,ios::beg);
        fbin.read(name,sizeof(char)*sizeof(name));
        fbin.read(reinterpret_cast<char*>(&age),sizeof(int));
        fbin.clear();
        cout << "Name - " << name << endl;
        cout << "Age - " << age << endl;
        cout << "Prodoljim? (y/n)"; 
        cin >> choice;
    }while(choice != 'n');
    menu();
}


Это сообщение отредактировал(а) Xenon - 30.3.2007, 23:20


--------------------
user posted image  
PM MAIL   Вверх
Night_xxx
Дата 31.3.2007, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 7.1.2007
Где: Набережные Челны

Репутация: 0
Всего: 0



Все спасибо тебе 
Xenon,  А вообще у меня был готовый вариант в книжке, но я сам по своему хотел написать. Все таки когда все сам делаешь, то очень многому учишься. 
PM MAIL   Вверх
Xenon
Дата 31.3.2007, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 19
Всего: 50



Не за что - учись smile
Единственное, мне еще вызов функции menu() не нравится. Я думаю, лучше так:
Код

#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>

void write();
void read();
void menu();

char filename[81];
int recsize = 20*sizeof(char)+sizeof(int);

using std::cout;
using std::cin;
using std::fstream;
using std::ios;
using std::endl;

fstream fbin;

int main() 
{     
    printf("Vvedite imya faila dla zapisi: ");
    cin.getline(filename,80);
    fbin.open(filename, ios::binary | ios::in | ios::out);
    if(!fbin)
    {
        cout << "\aFail " << filename << " ne bil uspershno otkrit";
        return -1;
    }
    menu();
    fbin.close();
    return 0;
}

void menu()
{
    int choice = 0;
    do
    {
        system ("cls");
        cout << "\n\n\t\t*************MENU**************";
        cout << "\n\n\t\tZapicati v fail   ------ PRESS 1"; 
        cout << "\n\n\t\tProchitati zapici ------ PRESS 2"; 
        cout << "\n\n\t\tViiti iz programmi------ PRESS 3";
        cout << "\n\n\t\tVash vibor  ";
        cin >> choice;
        switch(choice)
        {
        case 1: write();
            break;
        case 2: read();
            break;
        case 3:break;
        default:cout << "Nepravilnij vibor";
            break;
        }
    }while(choice !=3);
}

void write()
{
    char choice = 'y';
    int n;
    char name[20];
    int age;
    do
    {
        cout << "\nVvedite nomer dla zapici ";
        cin >> n;
        cout << "Name - "; 
        cin >> name;
        cout << "Age - "; 
        cin >> age;
        fbin.seekg(recsize*n,ios::beg);
        fbin.write(name,sizeof(char)*sizeof(name));
        fbin.write(reinterpret_cast<char*>(&age),sizeof(int));
        fbin.clear();
        cout << "Prodoljiti? (y/n)"; 
        cin >> choice;
    }while(choice != 'n');
}

void read()
{
    char choice = 'y';
    char name[20];
    int age;
    int n;
    do
    {
        cout << "\nVvedite nomer otkuda budem 4itati dannnie: "; 
        cin >> n;
        fbin.seekg(n*recsize,ios::beg);
        fbin.read(name,sizeof(char)*sizeof(name));
        fbin.read(reinterpret_cast<char*>(&age),sizeof(int));
        fbin.clear();
        cout << "Name - " << name << endl;
        cout << "Age - " << age << endl;
        cout << "Prodoljim? (y/n)"; 
        cin >> choice;
    }while(choice != 'n');
}



--------------------
user posted image  
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0650 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.