[...]
>тут вроде как в школе учат что С++ это надстройка над С
>с возможностью объектного программирования + несколько функций добавлено
>или обманывают? Многие так и пишут и даже так думают. Это уже давно не так.
[...]
>т.е. получается без указателей задача не решается?
Как правило, нет. Можно выделять память в куче (с помощью new) и возвращать этот указатель (и потом не забыть вызвать delete для него). Либо возвращать указатель на статически выделенную память. Либо передать указатель в ф-цию и она уже будет сразу создавать где надо. Либо.. можно, кажется, вернуть прям так структуру. Но так почти никто не делает, чтобы стек не раздувать.
>да кстати вместо gets нельзя ничего использовать в противном случае эта учебная
>задача будет считаться решённой неверно :(
BUGS
Never use gets(). Because it is impossible to tell without knowing the data in
advance how many characters gets() will read, and because gets() will continue to
store characters past the end of the buffer, it is extremely dangerous to use. It
has been used to break computer security. Use fgets() instead.
И вообще: "LSB deprecates gets()."
>получается
>а с указателями будет примерно так?
>
>int i;
>struct empire{char name[],capital[]; int public,area;}
Почему не используете std::string вместо массивов?
Ладно, раз уж хотите их использовать (Я ПРЕДУПРЕЖДАЛ!), так используйте правильно:
char name[] <-- это что? Кто будет размерность указывать?!
>char p=&str[10];
char p -- это вы создали один символ.
Кроме того, не надо обращаться к str[10] -- такого элемента нет. ЭТО ОШИБКА! Последний элемент имеет индекс 9!
>for (i=0;i<10;++i){
>str=state(char *p,int i)
>}
>char state(char *p,int i){
>cout << "ввести название"; cin >> *(p+i).name;
>cout << "ввести столицу"; cin >> *(p+i).capital;
>cout << "ввести население"; cin >> *(p+i).public;
>cout << "ввести площадь"; cin >> *(p+i).area;
>}
Таааак. Вы это хотя бы компилировать пробовали?! Тут ошибка на ошибке...
И вместо *(p+i) пишите p для удобства чтения кода.