Почему после ввода 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
Ну, как минимум, стандартная, классическая, сотни раз на этом сайте разобранная ошибка - отсутствие сброса буфера
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.
Дальше начинайте искать самых старых, теперь это просто.
Спрашивать, что дальше - не рекомендую: здесь помогают, а не решают за вас...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть ли в с++ для windows библиотека проверки правописания (только правильности написания слова)?
Хочу брать из файла числа и вписывать в элементы массиваПочему не работает? И как работает while (file >> k), while (file >> m), если я правильно написал...