Не работает программа на C++?

211
29 мая 2018, 19:00

Почему после ввода N нет приглашения ввести boof? программа просто завершается и ничего не выводит. Компилировала в Dev-C++.

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;
int main() { 
system("chcp 1251"); 
system("cls"); 
int N,i,j, date=0, older_date=21001231,count=0; 
char boof[50],older[40];
cin>>N;
while(N--)
{
cin.getline(boof,50);
for(i=4; i<=10; i+=3)
  date += atol(&boof[strlen(boof) - i])*pow(100,3-(i/3));       
    if(older_date > date) {
            count=1;
            older_date = date;
            strncpy(older, boof, strlen(boof)- 10);
    } 
    else if(older_date == date) {
        count++;
    }
}
if( count-1 )
    cout<<count<<' '<<older_date;
else
    cout<<older<<' '<<older_date;
}   

Имеется список людей с указанием их фамилии, имени и даты рождения. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять самого старшего человека из этого списка и выводить его фамилию и имя, а если имеется несколько самых старших людей с одинаковой датой рождения, то определять их количество.

На вход программе в первой строке подается количество людей в списке N. В каждой из последующих N строк находится информация в следующем формате:

    <Фамилия> <Имя> <Дата рождения> 

где <Фамилия> – строка, состоящая не более, чем из 20 символов без пробелов, <Имя> – строка, состоящая не более, чем из 20 символов без пробелов, <Дата рождения> – строка, имеющая вид ДД.ММ.ГГГГ, где ДД – двузначное число от 01 до 31, ММ – двузначное число от 01 до 12, ГГГГ – четырехзначное число от 1800 до 2100.

Пример входной строки:

    Иванов Сергей 27.03.1993 

Программа должна вывести фамилию и имя самого старшего человека в списке.
Пример выходных данных:

    Иванов Сергей 

Если таких людей, несколько, то программа должна вывести их количество. Пример вывода в этом случае:

    3 
Answer 1

Ну, как минимум, стандартная, классическая, сотни раз на этом сайте разобранная ошибка - отсутствие сброса буфера

cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

после чтения N и перед чтением buf, и-з-за чего в buf попадает пустая строка.

Что вы делает дальше - это какая-то жестокось, по крайней мере, понять по коду, чего вы добиваетесь, я не в состоянии. Если поясните, что должна делать ваша программа - будем смотреть дальше... Даже в учебном задании необходимы как минимум комментарии и приглашения ввода, поясняющие, что должно быть введено...

Пока, например, с чего решено, что strlen(boof) >= 10? А без происходит этого явное нарушение границ памяти... Если уж строка должна быть такая длинная (что в ней вообще должно быть?), то это условие надо проверять.

Update

Брр. Тогда вы все делаете совсем не так... Во-первых, вам надо хранить имя и фамилию как минимум самого старшего, а еще лучше - всех (так вам будет проще. Без этого можно обойтись, но вам, как начинающей, лучше хранить весь ввод).

struct Person
{
    string name, surname;
    int birthday;
};
vector<Person> ps;
cin >> N;
for(int i = 0; i < N; ++i)
{
    Person p;
    cin >> p.name >> p.surname;
    int d,m,y;
    char c;
    cin >> d >> c >> m >> c >> y;
    p.birthday = y*10000+m*100+d;
    ps.push_back(p);
}

После этого у вас в векторе - все люди, причем в полях birthdate их дни рождения - в непосредственно сравниваемом виде, с помощью <: yyyymmdd, типа, 20040220.

Дальше начинайте искать самых старых, теперь это просто.

Спрашивать, что дальше - не рекомендую: здесь помогают, а не решают за вас...

READ ALSO
Библиотека проверки правописания

Библиотека проверки правописания

Есть ли в с++ для windows библиотека проверки правописания (только правильности написания слова)?

197
Реализация bsearch

Реализация bsearch

Хочу ускорить программу встраивая bsearch, тк

192
C++ Передача значений из файла в массив

C++ Передача значений из файла в массив

Хочу брать из файла числа и вписывать в элементы массиваПочему не работает? И как работает while (file >> k), while (file >> m), если я правильно написал...

186
Пользовательский класс string

Пользовательский класс string

Зависает программа после ввода строкиПодскажите в чем ошибка?

205