The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Учебная задача по С++"
Отправлено phpcoder, 14-Мрт-08 16:27 
[...]
>тут вроде как в школе учат что С++ это надстройка над С
>с возможностью объектного программирования + несколько функций добавлено
>или обманывают?

Многие так и пишут и даже так думают. Это уже давно не так.

[...]
>т.е. получается без указателей задача не решается?

Как правило, нет. Можно выделять память в куче (с помощью 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[i]=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[i] для удобства чтения кода.

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.

На сайте действует частичное премодерирование - после публикации некоторые сообщения от анонимов могут автоматически скрываться ботом. После проверки модератором ошибочно скрытые сообщения раскрываются. Для ускорения раскрытия можно воспользоваться ссылкой "Сообщить модератору", указав в качестве причины обращения "скрыто по ошибке".



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру