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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод даты в список 
V
    Опции темы
bsa
Дата 5.5.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



ALI46, ты документацию на функции по религиозным мотивам не читаешь? Даю прямую наводку - читай про спецификаторы функции printf.
PM   Вверх
ALI46
  Дата 5.5.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bsa, читаю, и  религиозные мотивы тут не при чём, вот я так и подумал что в printf есть то что мне нужно, но видимо плохо искал, спасибо, что подсказал!

код (надеюсь что окончательный  smile )
Код

#include <stdio.h>
#include <time.h>
#include <conio.h>
struct date
{
    int day, mon, year;
};
struct TABL
{
    char tov[20];
    int kol;
    int cen;
    date dat;
    int sum;
};

class tblstr
{
    public:
    void input()
    {
        FILE *fin = fopen("fin.txt","wt+");
        TABL buf[4] = {{"Bread",3,4},{"Butter",5,5},{"Jam",3,3},{"Milk",2,5}};
        for(int i = 0; i<4;i++)
            fprintf(fin,"%s %d %d \n",buf[i].tov,buf[i].kol,buf[i].cen);
        fclose(fin);
    }
    void addst()
    {
        FILE *fin = fopen("fin.txt","r");
        FILE *fout = fopen("fout.txt","a");
        TABL tab[10];
        struct tm * timeinfo;
        int i;    
        char sd,sm,sy;
        for(i=0; i<4;i++)
        {                
            fscanf(fin,"%s%d%d",&tab[i].tov,&tab[i].kol,&tab[i].cen);
            int d=-1, m=-1, y=-1;            
            while (d<1 || d>31 || m<1 || m>12 || y<0 || y>99 || d>29&&m==2 || d>30&&(m==2||m==4||m==6||m==9||m==11))
            { 
                printf("Enter date (dd.mm.yy) for %d product\n",i+1);
                scanf("%d.%d.%d", &d, &m, &y);
                tab[i].dat.day = d;
                tab[i].dat.mon = m;
                tab[i].dat.year = y;
            }
            tab[i].sum=tab[i].kol*tab[i].cen;
            fprintf(fout,"%s\t %d\t %d\t %.2d.%.2d.%.2d\t %d\n",tab[i].tov,tab[i].kol,tab[i].cen,tab[i].dat,tab[i].sum);
        }
        fclose(fin);
        fclose(fout);
    }
};
void main()
{
    tblstr run;
    run.input();
    run.addst();
    getch();
}


Это сообщение отредактировал(а) ALI46 - 5.5.2008, 23:50
PM MAIL   Вверх
ALI46
  Дата 6.5.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



сегодня показал преподу прогу, ему не понравилось что нет проверки на високосность года(ну это ещё ладно), но главная претензия меня окончательно добила - "вы программируете на C++, а не на C поэтому чтоб никаких printf() scanf() fprintf() fscanf() и т.п. не было!"

как реализовать ввод/вывод даты через потоки?
PM MAIL   Вверх
Alek86
Дата 6.5.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



молодец препод!!!

подключай iostream, читай доки


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


Новичок



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

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



Цитата(Alek86 @  6.5.2008,  16:48 Найти цитируемый пост)
молодец препод!!!


Alek86, ага молодец...  smile 

fstream использую вот тока дату в формате dd.mm.yy ввести не получается...
PM MAIL   Вверх
ALI46
  Дата 6.5.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



написал с потоками, но как описать ввод даты не знаю((((((
Код

#include <stdio.h>
#include <time.h>
#include <fstream.h>
#include <iomanip.h>
#include <conio.h>
struct date
{
    int day, mon, year;
};
struct TABL
{
    char tov[20];
    int kol;
    int cen;
    date dat;
    int sum;
};

class tblstr
{
    public:
    int input()
    {
        ofstream fin("fin.txt", ios::out);
        if (!fin)
        {
            cout<<"ERROR!"<<endl;
            return 1;
        }
        TABL buf[4] = {{"Bread",3,4},{"Butter",5,5},{"Jam",3,3},{"Milk",2,5}};
        for(int i = 0; i<4;i++)
            fin << buf[i].tov << " " << buf[i].kol << " " << buf[i].cen << endl;
        fin.close();
    }
    void addst()
    {
        ifstream fin("fin.txt", ios::in);
        ofstream fout("fout.txt", ios::out);
        TABL tab[10];
        int i;
        for(i=0; i<4;i++)
        {                
            fin >> tab[i].tov >> tab[i].kol >> tab[i].cen;
            int d=-1, m=-1, y=-1;            
            while (d<1 || d>31 || m<1 || m>12 || y<0 || y>99 || d>29&&m==2 || d>30&&(m==2||m==4||m==6||m==9||m==11))
            { 
                cout << "Enter date (dd.mm.yy) for " << i+1 << " product\n";
                // Как дату вписать здесь? //cin >> d >> m >> y;
                tab[i].dat.day = d;
                tab[i].dat.mon = m;
                tab[i].dat.year = y;
            }
            tab[i].sum=tab[i].kol*tab[i].cen;
            fout << tab[i].tov << " " << tab[i].kol << " " <<  tab[i].cen << " " <<  tab[i].dat.day << "." << tab[i].dat.mon << "." << tab[i].dat.year << " " <<  tab[i].sum << endl;
        }
        fin.close();
        fout.close();
    }
};
void main()
{
    tblstr run;
    run.input();
    run.addst();
    getch();
}

PM MAIL   Вверх
bsa
Дата 6.5.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



ALI46, ты не поверишь!
Код
int d, m, y;
char c; // нужно для пропуска разделителей
std::cin >> d >> c >> m >> c >> y;

PM   Вверх
ALI46
Дата 6.5.2008, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



bsa, действительно бы не поверил)))
спасибо большое всем кто помогал!!!
теперь високосные тоже учитывает
Код

#include <stdio.h>
#include <time.h>
#include <fstream.h>
#include <iomanip.h>
#include <conio.h>
struct date
{
    int day, mon, year;
};
struct TABL
{
    char tov[20];
    int kol;
    int cen;
    date dat;
    int sum;
};

class tblstr
{
    public:
    int input()
    {
        ofstream fin("fin.txt", ios::out);
        if (!fin)
        {
            cout<<"ERROR!"<<endl;
            return 1;
        }
        TABL buf[4] = {{"Bread",3,4},{"Butter",5,5},{"Jam",3,3},{"Milk",2,5}};
        for(int i = 0; i<4;i++)
            fin << buf[i].tov << " " << buf[i].kol << " " << buf[i].cen << endl; 
        fin.close();
    }
    void addst()
    {
        ifstream fin("fin.txt", ios::in);
        ofstream fout("fout.txt", ios::out);
        TABL tab[10];
        int i;
        for(i=0; i<4;i++)
        {                
            fin >> tab[i].tov >> tab[i].kol >> tab[i].cen;
            int d=-1, m=-1, y=-1;            
            while (d<1||d>31||m<1||m>12||y<0||y>99||d>29&&m==2||d>30&&(m==2||m==4||m==6||m==9||m==11)||(!(y%4==0&&y%100!=0||y%400==0)&&(m==2))&&(d==29))
            { 
                cout << "Enter date (dd.mm.yy) for " << i+1 << " product\n";
                char c;
                cin >> d >> c >> m >> c >> y;
                tab[i].dat.day = d;
                tab[i].dat.mon = m;
                tab[i].dat.year = y;
                if (d<1||d>31||m<1||m>12||y<0||y>99||d>29&&m==2||d>30&&(m==2||m==4||m==6||m==9||m==11)||(!(y%4==0&&y%100!=0||y%400==0)&&(m==2))&&(d==29)) cout << "Error\n";
            }
            tab[i].sum=tab[i].kol*tab[i].cen;
            fout << tab[i].tov << "\t" << tab[i].kol << "\t" <<  tab[i].cen << "\t" << setw(2) << setfill('0') << tab[i].dat.day << "." << setw(2) << setfill('0') << tab[i].dat.mon << "." << setw(2) << setfill('0') << tab[i].dat.year << "\t" <<  tab[i].sum << endl;
        }
        fin.close();
        fout.close();
    }
};
void main()
{
    tblstr run;
    run.input();
    run.addst();
    getch();
}

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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