Страница 1 из 1
Задача на нахождения столицы по стране
Добавлено: 21 дек 2014, 16:11
Arkass
Добрый день помогите написать программу в С++
завтра зачёт нужно принести её, буду очень признателен и благодарен.
Задание:
Напишите программу для любознательного, но туповатого путешественника, которая при наборе страны выдаст на экран столицу данной страны и количество народа, проживающего в ней. Данные для программы:
Страна Столица Население (млн. чел.)
Венгрия Будапешт 11
Италия Рим 60
Греция Афины 10
Турция Анкара 55
Египет Каир 53
Непал Катманду 18
Бельгия Брюссель 10
Зарание большое спасибо

Re: Построить программу С++
Добавлено: 22 дек 2014, 01:26
Bce_OK
На вскидку, как-то так. Я не проверял
Код: Выделить всё
#include <iostream>
#define MAX_COUNTRY 7
struct country{
char* name;
char* capital;
int demography;
country (const char* n, const char c, const int d)
{
strcpy(name, n);
strcpy(capital, c);
demography = d;
}
};
int main(int argc, char** argv)
{
country countries[MAX_COUNTRY] = {
country("Венгрия", "Будапешт", 11),
country("Италия", "Рим", 60),
country("Греция", "Афины", 10),
country("Турция", "Анкара", 55),
country("Египет", "Каир", 53),
country("Непал", "Катманду", 18),
country("Бельгия", "Брюссель", 10)
};
std::cout<<"Введите страну: ";
std::cin>>country_name;
for(int i=0; i<MAX_COUNTRY; ++i)
{
if( strcmp(countries[i].name,country_name) == 0)
{
std::cout<<"Столица: "<<countries[i].capital<<std::endl;
std::cout<<"Население: "<<countries[i].demography<<std::endl;
return 0;
}
}
std::cout<<"страна не найдена"<<std::endl;
return 0;
}
Re: Построить программу С++
Добавлено: 22 дек 2014, 07:26
WinMain
В структуре country не выделяется память под строки. Программа будет падать.
Re: Построить программу С++
Добавлено: 22 дек 2014, 12:46
Romeo
Ещё в строке
const char c пропущена звёздочка.
Но в любом случае писатель программы предупредил, что это навскидку. Топикстартер должен сам доработать программу и попутно разобраться почему так делать нельзя и как делать правильно

Re: Построить программу С++
Добавлено: 22 дек 2014, 17:06
Decoder
Поскольку все строковые значения в данном примере прописаны статически в программном коде, то в контексте данного примера память под строки в структуре country можно и не выделять, достаточно просто присвоить внутренним полям структуры соответствующие значения входных указателей. И этот пример заработает.
Но если делать как положено, то можно вместо функции strcpy вызывать функцию strdup. Ещё в структуру country нужно будет деструктор добавить, чтобы из него вызывать функции free для освобождения выделенной памяти.