Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > создать двоичный файл в виде таблицы


Автор: ФЕкЛА 1.4.2009, 19:16
дан файл ,содержащий сведения о багаже пассажиров в виде:
ФИО / Кол-во вещей / Общий вес багажа

Один пассажир может провести бесплатно багаж весом не более 20 кг.За каждый лишний кг веса берется дополнительная платав размере а рублей.Выдать список пассажиров у которых вес превышает 20 кг в виде таблицы:
ФИО / Вес багажа сверх нормы / Стоимость провоза багажа в рублях 

Прораму нужно написать ипользуя структуру и нужно чтоб можно было вносить изменения в файл ,те делать вставки в разные места,(в начало,серединку куда нить и конец)
Я начала писать функцию ввода данных,ну создания файла,а она мне ошибки выдает,я не могу понять чего ей не нравиться.Укажи в чем проблема,пожалуйсто

вот код:
Код
#include <string.h>
#include <iostream>
using namespace std;
struct Stud{
    char fio[30];
    int koll;
    float obv[30];
    };

void vvod (char *name);

int main()
{
char *file = "file.txt";
vvod (file);
}

void vvod (char *name){
    FILE *f;
    Stud st;
    float sum;
    int i=1,k,j,ves[k];
    f = fopen(name,"wb");
    if (f == NULL){printf ("Error!");exit(1);}
    printf("vvedite kol-vo passashirov");
    scanf("%d",&st.koll);
    while ((st.koll--)>0)
    {
        printf ("vvedite fio");
        scanf("%s ",&st.fio[i]);
        printf ("vvedite kol-vo ego veschej");
        scanf("%d",&j);
        for (;;j--)
        {
            printf("vvedite ves veschi");
            scanf("%f ,"&ves[k]);
            sum = sum + ves[k];
            k++;
        }
        st.obv[i] = sum;
    }
    fclose(f);
    printf("file bil sohranen");
    
}


Модератор: пользуйся кнопкой "Код"

Автор: EvilsInterrupt 1.4.2009, 19:40
ФЕкЛА, 
Какие именно ошибки ? Приведите текст того, что выплюнул вам компиллер или линкер

Автор: ФЕкЛА 1.4.2009, 19:52
'k' : undeclared identifier
'&' : illegal, left operand has type 'const char [5]'
'&' : illegal, right operand has type 'float'

Автор: ФЕкЛА 1.4.2009, 20:08
ща я исправила чуть код и получила вот
Код
#include <string.h>
#include <iostream>
using namespace std;
struct Stud{
    char fio[30];
    int koll;
    float obv[30];
    float ves[100];
};

void vvod (char *name);

int main()
{
char *file = "file.txt";
vvod (file);
}

void vvod (char *name){
    FILE *f;
    Stud st;
    float sum;
    int i=1,j,k;
    f = fopen(name,"wb");
    if (f == NULL){printf ("Error!");exit(1);}
    printf("vvedite kol-vo passashirov");
    scanf("%d",&st.koll);
    while ((st.koll--)>0)
    {
        printf ("vvedite fio");
        scanf("%s ",&st.fio[i]);
        printf ("vvedite kol-vo ego veschej");
        scanf("%d",&j);
        for (;;j--)
        {
            printf("vvedite ves veschi");
            scanf("%f,"&st.ves[k]);
            sum = sum + st.ves[k];
            k++;
        }
        st.obv[i] = sum;
    }
    fclose(f);
    printf("file bil sohranen");
    
}


теперь он ругается на строку scanf("%f,"&st.ves[k]); 
и выдает вот что
'&' : illegal, left operand has type 'const char [4]'
'&' : illegal, right operand has type 'float'



Модератор: пользуйся кнопкой "Код"

Автор: zim22 1.4.2009, 20:16
ФЕкЛА, оформите код тегами CODE

Автор: ФЕкЛА 1.4.2009, 20:28


Код

#include <string.h>
#include <iostream>
using namespace std;
struct Stud{
    char fio[30];
    int koll;
    float obv[30];
    float ves[100];
};

void vvod (char *name);

int main()
{
char *file = "file.txt";
vvod (file);
}

void vvod (char *name){
    FILE *f;
    Stud st;
    float sum;
    int i=1,j,k;
    f = fopen(name,"wb");
    if (f == NULL){printf ("Error!");exit(1);}
    printf("vvedite kol-vo passashirov");
    scanf("%d",&st.koll);
    while ((st.koll--)>0)
    {
        printf ("vvedite fio");
        scanf("%s ",&st.fio[i]);
        printf ("vvedite kol-vo ego veschej");
        scanf("%d",&j);
        for (;;j--)
        {
            printf("vvedite ves veschi");
            scanf("%f,"&st.ves[k]);
            sum = sum + st.ves[k];
            k++;
        }
        st.obv[i] = sum;
    }
    fclose(f);
    printf("file bil sohranen");
    
}

Автор: zim22 1.4.2009, 20:57
Код

 scanf("%f,"&st.ves[k]);

Код

 scanf("%f",&st.ves[k]);


Автор: ФЕкЛА 1.4.2009, 21:11
я понимаю что у меня ошибка в этой строчке,только исправить ее у меня не получается((

Автор: Anikmar 1.4.2009, 21:34
Цитата(ФЕкЛА @  1.4.2009,  21:11 Найти цитируемый пост)
я понимаю что у меня ошибка в этой строчке,только исправить ее у меня не получается(( 

Запятую поставьте  smile 

Автор: zim22 1.4.2009, 21:35
ФЕкЛА, присмотритесь внимательней к моему предыдущему сообщению. буквально читайте по буквам. (подсказка: вы запятую не туда влепили).
если вопросов нет - не забывайте пометить тему решённой.

Автор: ФЕкЛА 1.4.2009, 22:43
ой,точно))
а уменя чето с вводом данных неправвильно идет))он позволяет ввести 2-е фамили выдает точто в функции печати прописано,выдает ошибку что-то неладное с "к"  и отказывается дальше работать.не пойму чего ему не нравится((

Автор: mes 1.4.2009, 23:01
Цитата(ФЕкЛА @  1.4.2009,  21:43 Найти цитируемый пост)
а уменя чето с вводом данных неправвильно идет))он позволяет ввести 2-е фамили выдает точто в функции печати прописано,выдает ошибку что-то неладное с "к"  и отказывается дальше работать.не пойму чего ему не нравится(( 

не смотрел всеь код,
но тут:

Цитата(ФЕкЛА @  1.4.2009,  19:08 Найти цитируемый пост)
struct Stud{
    char fio[30];
    int koll;
    float obv[30];
    float ves[100];
};

под фио выделено всего 30 символов, т.е как я понимаю на одну фамилию..  или это 30 фамилий по одному символу ? Ну тогда напрашивается, что Вы пишите мимо отведенной памяти.. 
smile


Автор: bsa 1.4.2009, 23:21
ФЕкЛА, если не секрет, зачем ты подключаешь хидер <iostream>, раз не используешь потоки?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)