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

Исправьте ошибку C++ запись в файл - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
04.12.2010, 00:41     Исправьте ошибку C++ запись в файл #1
исправьте пожалуйста ошибку, надо что бы переменной sl присвоилось значение, равное длинне имени(name) в структуре student
почему то ругается на list

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
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <fstream>
#include <stdio.h>
#include <ctype.h>
 
 
using namespace std;
 
 
struct student                                // Шаблон структуры 
{
    char name;                            // имя и фамилия
    int year;                                // возраст
    int mark;                                // оценка
};
        vector <student> list;                // вектор данных по группе
        student buffer;                        // Дополнительная структура
        int i, j ;
        char ci;                            //буквенный аналог i
void main (void)
{
    student students;
    {
    do                                        // Заполняем массив структур
        {
            cout <<  "Vvedite imya i familiu  ";
            cin >> students.name;
            cout <<  "Vvedite vozrast ";
            cin >> students.year;
            cout << "Vvedite ocenky  ";
            cin >> students.mark;
            list.push_back (students);
            cout << "Prodoljit' zapolnenie? [y/n]  ";
            cin >> ci;
            cout << endl;
        }
    while(ci!='n') ;
    }
    FILE*f=fopen("d:\db.dat","rb");
    int size=list.size();
    fwrite(&size,sizeof(size),1,f);
        for(unsigned int i=0;i<list.size();i++)
        {
            int sl=list[i]name.length()+1; //ошибка list
            fwrite (&sl,sizeof(sl),1,f);
            fwrite (&list[i]name.c_str(),list[i]name.length()+1,1,f);//ошибка в list
            fwrite (&list[i].year,sizeof(int),1,f);
            fwrite (&list[i].mark,sizeof(int),1,f);
        }
        fclose(f);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2010, 00:41     Исправьте ошибку C++ запись в файл
Посмотрите здесь:

C++ Исправьте ошибку
C++ строки, исправьте ошибку(
исправьте ошибку,пожалуйста C++
Функция, исправьте ошибку C++
C++ Исправьте ошибку
Исправьте пожалуйста ошибку C++
C++ Исправьте ошибку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2913 / 1342 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
04.12.2010, 01:13     Исправьте ошибку C++ запись в файл #2
Вот тут косяк. Точка не пропечаталась?

C++
1
list[i]name
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
04.12.2010, 11:14  [ТС]     Исправьте ошибку C++ запись в файл #3
Цитата Сообщение от lemegeton Посмотреть сообщение
Вот тут косяк. Точка не пропечаталась?

C++
1
list[i]name
что с точкой, что без не работает...
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
04.12.2010, 11:48     Исправьте ошибку C++ запись в файл #4
Цитата Сообщение от EvilHero Посмотреть сообщение
что с точкой, что без не работает...
С точкой то оно красивше)))
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
04.12.2010, 11:49  [ТС]     Исправьте ошибку C++ запись в файл #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
С точкой то оно красивше)))
не спорю, но не исправляет, все равно орет на list "выражение должно иметь тип класса"
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
04.12.2010, 12:12     Исправьте ошибку C++ запись в файл #6
Орет потому, что .length() является функцией-членом класса string, а ты пытаешься такую конструкцию к char применить.

Описание student измени на как-то так:
C++
1
2
3
4
5
6
struct student                                // Шаблон структуры 
{
    string name;                            // имя и фамилия
    int year;                                // возраст
    int mark;                                // оценка
};
- и вдумчиво разгребай дерьмо, которое полезет.

Хотя лучше описать name как: char name[64] и не парится с разной длинной данных.
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
04.12.2010, 12:14  [ТС]     Исправьте ошибку C++ запись в файл #7
спасибо ! ошибка исправилась, но появилась новая )) в строке
Код
 fwrite (&list[i].name.c_str(),list[i].name.length()+1,1,f);
1й list "выражение должно быть левосторонним значением или обозначением функции" что это значит ?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4248 / 2780 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 1
Завершенные тесты: 1
04.12.2010, 12:18     Исправьте ошибку C++ запись в файл #8
Цитата Сообщение от EvilHero Посмотреть сообщение
не спорю, но не исправляет, все равно орет на list "выражение должно иметь тип класса"
Я к тому, что точка, согласно синтаксису, необходима.
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
04.12.2010, 12:24     Исправьте ошибку C++ запись в файл #9
Цитата Сообщение от EvilHero Посмотреть сообщение
ошибка исправилась, но появилась новая )) в строке
Измени на:
C++
1
fwrite (list[i].name.c_str(),list[i].name.length()+1,1,f);
- .c_str() и так адрес возвращает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2010, 02:27     Исправьте ошибку C++ запись в файл
Еще ссылки по теме:

исправьте маленькую ошибку C++
Исправьте 1 ошибку пожалуйста C++
C++ Найти ошибку. Запись строк в обратном порядке в другой файл

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

Или воспользуйтесь поиском по форуму:
EvilHero
0 / 0 / 0
Регистрация: 04.12.2010
Сообщений: 29
05.12.2010, 02:27  [ТС]     Исправьте ошибку C++ запись в файл #10
спасибо все работает)) буду писать дальше, если что спрошу, надеюсь поможете )

Добавлено через 12 часов 16 минут
продолжаю писать прогу, о5 возникла небольшая проблема, но теперь уже с чтением из файла, опять орет на list

code:
Код
    FILE*f=fopen("db.dat","wb");
    int size=0;
    fread(&size,sizeof(size),1,f);
    list.resize(size);
    for (unsigned i=0;i<size;i++)
        {
            int sl=0;
            fread(&sl,sizeof(sl),1,f);
            list[i].name.resize(sl);
            fread (list[i].name.c_str(),sl,1,f); //ошибка в list
            fread(&list[i].year,sizeof(int),1,f);
            fread(&list[i].mark,sizeof(int),1,f);
        }
    fclose(f)
говорит "аргумент типа "const char*" несовместим с параметром "void*"

Добавлено через 1 час 41 минуту
Вот дописал программу, она работает так:
мы создаем список студентов с их именами фамилиями оценкой и возрастом, и записываем в файл db.dat.
далее, мы считываем этот файл и выбираем, что с ним делать, можем отсортировать, добавить студента, удалить, изменить, вывести список на экран и сохранить изменения.

Проверьте пожалуйста на наличие ошибок, и подскажите способ их решения.
пару я уже знаю: в строке № 78 компилятор ругается на list
Код
 fread (list[i].name.c_str(),sl,1,f); //ошибка в list
Еще я так и не разобрался с проверкой на наличие файла, закоментировал если кто знает как справить буду очень рад.

больше ошибок не заметил, если есть сообщите пожалуйста.

вот код:

Код
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <stdio.h>
#include <ctype.h>


using namespace std;


struct student                        // Шаблон структуры 
{
    string name;                    // имя и фамилия
    int year;                        // возраст
    int mark;                        // оценка
};
        vector <student> list;        // вектор данных по группе
        student buffer;                // Дополнительная структура
        int i, j, z, records ;
        char ci;                    //буквенный аналог i
int main (int)
{
    student students;
        {
        do                                // Заполняем массив структур
            {
                records=0;
                cout <<  "Vvedite imya i familiu    ";
                cin >> students.name;
                cout <<  "Vvedite vozrast    ";
                cin >> students.year;
                cout << "Vvedite ocenky    ";
                cin >> students.mark;
                records++;
                list.push_back (students);
                cout << "Prodoljit' zapolnenie? [y/n]  ";
                cin >> ci;
                cout << endl;
            }
        while(ci!='n') ;
        }

    FILE*f=fopen("db.dat","rb");
    //if ((f=fopen("db.dat","rb"))==NULL)
    //    {
 //          cout << "Missing File db.dat " << endl <<"Create file bd.dat? [y/n]    ";
    //       cin >> ci;
    //       if (ci!='n')
    //        {
    //        exit(1);
    //        }
    //           FILE*f=fopen("db.dat","wb");
    //        cout << "File db.dat created" <<endl;
    //    }
    int size=list.size();
    fwrite(&size,sizeof(size),1,f);
    for(unsigned i=0;i<list.size();i++)
        {
            int sl=list[i].name.length()+1; 
            fwrite (&sl,sizeof(sl),1,f);
            fwrite (list[i].name.c_str(),list[i].name.length()+1,1,f);
            fwrite (&list[i].year,sizeof(int),1,f);
            fwrite (&list[i].mark,sizeof(int),1,f);
        }
    fclose(f);

    FILE*f=fopen("db.dat","wb");
    int size=0;
    fread(&size,sizeof(size),1,f);
    list.resize(size);
    for (unsigned i=0;i<size;i++)
        {
            int sl=0;
            fread(&sl,sizeof(sl),1,f);
            list[i].name.resize(sl);
            fread (list[i].name.c_str(),sl,1,f); //ошибка в list
            fread(&list[i].year,sizeof(int),1,f);
            fread(&list[i].mark,sizeof(int),1,f);
        }
    fclose(f);
    do
    {
    cout<<"Vi nahodites' v glavnom menu, viberite deistvie:"<<endl
        <<"1 - dobavit' studenta."<<endl
        <<"2 - ydalit' studenta."<<endl
        <<"3 - izmenit' studenta."<<endl
        <<"4 - sortirovka."<<endl
        <<"5 - pokazat' spisok"<<endl
        <<"6 - sohranit' db.dat"<<endl
        <<"Prss any key for exit"<<endl;
        cin >> i;
        switch (i)
        {
        case 1:
            cout<< "Vi zahoteli dobavit' studenta"<<endl;
            do
            {
                cout <<  "Vvedite imya i familiu    ";
                cin >> students.name;
                cout <<  "Vvedite vozrast    ";
                cin >> students.year;
                cout << "Vvedite ocenky    ";
                cin >> students.mark;
                records++;
                list.insert(list.end()+1,students);
                i++;
                cout << "Prodoljit' zapolnenie? [y/n]  ";
                cin >> ci;
                cout << endl;
            }
        while(ci!='n');
            
            break;
        case 2:
            cout<< "Vi zahoteli ydalit' studenta"<<endl
                <<"Vvedite ID:";
            cin >> i;
            cout<< endl <<"Student #"<<i
                << list[i].name
                <<"    "
                <<list[i].year
                <<"    "
                <<list[i].mark;
            cout<<"deleted";
            records--;
            list.erase(list.begin()+i);
            break;
        case 3:
                cout<< "Vi zahoteli izmenit' studenta"<<endl
                <<"Vvedite ID:";
            do
            {
                cin >> i;
                cout <<  "Vvedite imya i familiu    ";
                cin >> students.name;
                cout <<  "Vvedite vozrast    ";
                cin >> students.year;
                cout << "Vvedite ocenky    ";
                cin >> students.mark;
                records++;
                list.insert(list.begin()+i,students);
                cout << "Prodoljit' redaktirovanie? [y/n]  ";
                cin >> ci;
                cout << endl;
            }
        while(ci!='n');
            break;
        case 4:
            cout << "Vi vibrali sortirovky"<<endl<<"Viberite variant sortirovki:"<<endl;
            cout << "Otsortirovat' po ocenke - 1 " <<endl; 
            cout << "Otsortirovat' po vozrasty - 2  "<< endl;
            cout << endl;
            cin >> i;
            switch (i)
                {
                case 1:
                cout << "Vi vibrali sortirovky po ocenke "<<endl;
                cout << "1- po vozrastaniu" <<  endl << "2- po ubivaniu";
                cout << endl;
                cin >> z;
        cout << endl;
        switch (z)
        {
        case 1:
    for (i = 0; i < records-1; i++)        // сортирует
    for (j = i; j < records;j++)   
    if (list[i].mark > list[j].mark)
        { 
            buffer = list[i];    // Перестановка элементов
            list[i] = list[j];    // структуры, особенность
            list[j] = buffer;    // языка C/C++
        }
    break;
    case 2:
    for (i = 0; i < records-1; i++)            // сортирует
    for (j = i; j < records;j++)   
    if (list[i].mark < list[j].mark)
        { 
            buffer = list[i];    // Перестановка элементов
            list[i] = list[j];    // структуры, особенность
            list[j] = buffer;    // языка C/C++
        }
    break;
    default: break;
        }
break;
case 2:
    
    cout << "Vi vibrali sortirovky po vozrasty"<<endl;
        cout << "1- po vozrastaniu" <<  endl << "2- po ubivaniu" << endl;
        cin >> z;
        cout << endl;
        switch (z)
        {
        case 1:
        cout << endl;
    for (i = 0; i < records-1; i++)            // сортирует
    for (j = i; j < records;j++)   
    if (list[i].year > list[j].year)
        { 
            buffer = list[i];    // Перестановка элементов
            list[i] = list[j];    // структуры, особенность
            list[j] = buffer;    // языка C/C++
        }
    break;
    case 2:
        cout << endl;
    for (i = 0; i < records-1; i++)            // сортирует
    for (j = i; j < records;j++)   
    if (list[i].year < list[j].year)
        { 
            buffer = list[i];    // Перестановка элементов
            list[i] = list[j];    // структуры, особенность
            list[j] = buffer;    // языка C/C++
        }
    break;
default: break;
        }
default: break;
    }
        case 5:
            for (i = 0; i < records; i++)            // Выводим результат
            {
            cout <<endl;
            cout << " Student " << list[i].name ;
            cout << " Vozrast " <<  list[i].year;  
            cout << " Ocenka " <<  list[i].mark;
            }
        break;
        case 6:
                int size=list.size();
                fwrite(&size,sizeof(size),1,f);
                for(unsigned i=0;i<list.size();i++)
                {
                    int sl=list[i].name.length()+1; 
                    fwrite (&sl,sizeof(sl),1,f);
                    fwrite (list[i].name.c_str(),list[i].name.length()+1,1,f);
                    fwrite (&list[i].year,sizeof(int),1,f);
                    fwrite (&list[i].mark,sizeof(int),1,f);
                }
                fclose(f);
                break;
        default: break;
            }
            cout << "Dlya vozvrata v glavmoe menu najmite 0";
            cin >> i;

            }
            while (i==0);
            exit(1);




}
Yandex
Объявления
05.12.2010, 02:27     Исправьте ошибку C++ запись в файл
Ответ Создать тему
Опции темы

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