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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Формирования списка студентов 
:(
    Опции темы
Sardragon
Дата 18.11.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здраствуйте!
Помогите пожалуйста найти косяк. Выводится только первая строчка из списка студентов.

Вот такая задачка : Программа формирования списка студентов. Используя структуру описания даты, построить связный список студентов НГТУ, сформированный в алфавитном порядке. При введении даты рождения и даты поступления осуществлять контроль правильности ввода дат.

Код

#include <stdio.h> 
#include <tchar.h>
#include <string.h>
#include <fstream>
#include <iostream>
#include <conio.h>
using namespace std;

typedef struct date 
{
    int dd,mm,yy;
};
struct spisok
{
   char*fam;        
   date d;            //Дата поступления
};

void print_date(date);//Печать даты в формате dd.mm.yy
int true_date(date);  //Проверка правильности ввода даты    
void print_spisok(spisok);//Печать содержимого объекта 
int _tmain(int argc, _TCHAR* argv[])
{
    date d1;
    setlocale(LC_CTYPE,"russian");
    spisok*f;
    int n,i;
    ifstream fin("input.txt");//Файл, описывающий содержимое базы
    char st[30];
    fin >> n;
    f=new spisok[n];
    for(i=0;i<n;i++)
    {    
        fin.get();
        fin.getline(st,29);
        f[i].fam=strdup(st);
        do
        {
            fin>>d1.dd>>d1.mm>>d1.yy;
            if(!true_date(d1))
            {
                cout<<"Дата введена неправильно!\n";
                return 1;
            }
        }while(!true_date(d1));
        f[i].d=d1;//Дата поступления
    }
    fin.close();
    for(i=0;i<n;i++)//Печать содержимого базы
    {
        print_spisok(f[i]);
        cout<<'\n';
    }
    
    return 0;
}
void print_date(date d)
{
    char s[9];
    s[8]='\0';
    s[0]='0'+d.dd/10;
    s[1]='0'+d.dd%10;
    s[2]='.';
    s[3]='0'+d.mm/10;
    s[4]='0'+d.mm%10;
    s[5]='.';
    int y=d.yy%100;
    s[6]='0'+y/10;
    s[7]='0'+y%10;
    cout<<s;
}
int true_date(date d)
{
    int dm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int v;
    if((d.yy/4==0&&d.yy/100!=0)||d.yy%400==0)
        v=1;
    else
        v=0;
    if(d.yy<=0) return 0;
    if(d.mm<1||d.mm>12) return 0;
    if(d.mm!=2&&(d.dd<1||d.dd>dm[d.mm])) return 0;
    if(d.mm==2&&(d.dd<1||d.dd>28+v)) return 0;
    return 1;
}
void print_spisok(spisok f)
{
    cout.width(20);
    cout<<f.fam;
    
    print_date(f.d);
    getch();
}





PM MAIL   Вверх
feodorv
Дата 18.11.2012, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



А зачем в цикле чтения записей for(i=0;i<n;i++) делать второй цикл:
Цитата(Sardragon @  18.11.2012,  14:06 Найти цитируемый пост)
       do
        {
            fin>>d1.dd>>d1.mm>>d1.yy;
            if(!true_date(d1))
            {
                cout<<"Дата введена неправильно!\n";
                return 1;
            }
        }while(!true_date(d1));



Давайте придерживаться стиля C++ и не допускать лишних копирований:
Цитата(Sardragon @  18.11.2012,  14:06 Найти цитируемый пост)
void print_spisok(spisok &f)

То же с другими подпрограммами.


Цитата(Sardragon @  18.11.2012,  14:06 Найти цитируемый пост)
Выводится только первая строчка из списка студентов.

Здесь нужно подсмотреть отладчиком или отладочными сообщениями...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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