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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кракозябры при вводе в текстовый файл 
:(
    Опции темы
Ascold2015
Дата 1.12.2015, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток!
Пытаюсь ввести данные в файл. Проблема вот в чем - следующий код записывает в файл кракозябры (случайные символы). В чем ошибка? Вроде размер переменной правильно нахожу.
Код

struct STUDENT
{
    string FIO[3];
    int DataNarod[3];
    string grupa;
    float ocinkaFizika;
    float ocinkaMath;
    float ocinkaIstoria;
    int stipendia;//0 либо 1
};

FILE *G;
void Input()//Ввод данных в файл
{
    if ((G = fopen("Familia.txt", "wb")) != NULL) {
        cout << "Input vidomosti o studentovi " << endl;
        STUDENT S[n];
        for (int i = 0; i < n; i++) {
            cout << "Vvedit` FIO" << endl;
            cin >> S[i].FIO[0];
            cin >> S[i].FIO[1];
            cin >> S[i].FIO[2];

            cout << "Vvedit` datu narodjenn`a" << endl;
            cin >> S[i].DataNarod[0];
            cin >> S[i].DataNarod[1];
            cin >> S[i].DataNarod[2];
            cout << "Vvedit` grupu" << endl;
            cin >> S[i].grupa;
            cout << "Vvedit` ocinku z fiziki" << endl;
            cin >> S[i].ocinkaFizika;
            cout << "Vvedit` ocinku z matematiki" << endl;
            cin >> S[i].ocinkaMath;
            cout << "Vvedit` ocinku z istotii" << endl;
            cin >> S[i].ocinkaIstoria;
            cout << "Vvedit` nayavnist` stipendii (1 - bula, 2 - ne bulo)" << endl;
            cin >> S[i].stipendia;
            //Ввод данных в файл
            fwrite(&S[i].FIO, sizeof(S[i].FIO), 1, G);
            fwrite(&S[i].DataNarod, sizeof(S[i].DataNarod), 1, G);
            fwrite(&S[i].grupa, sizeof(S[i].grupa), 1, G);
            fwrite(&S[i].ocinkaFizika, sizeof(float), 1, G);
            fwrite(&S[i].ocinkaMath, sizeof(float), 1, G);
            fwrite(&S[i].ocinkaIstoria, sizeof(float), 1, G);
            fwrite(&S[i].stipendia, sizeof(int), 1, G);
            fputs("\n", G);
            //
            //Условие продолжения записи
            cout << "Bazhaete prodovziti (1 - da, 0 - ni)?" << endl;
            int t; cin >> t;
            if (t==0)
                return;
        }
    }
    fclose(G);
    }

PM MAIL   Вверх
math64
Дата 1.12.2015, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



gruppa и fio у Вас типа string. Это объект, а не структура. sizeof(string) выдает размер объекта, а не строки в нем хранящейся.
Длина строки (без '\0' на конце) int len = str.length(); сама строка, как указатель const char* s = str.c_str();
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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