IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Передача и возврат ссылок из функции, С++
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Объявил структуру Student, которая содержит четыре поля(фамилию, имя и отчество студента и год рождения), при этом строковые значения храню в виде массивов,а не указателей. Описал и инициализировал переменную st типа Student фамилией, именем и отчеством, не задавая год его рождения.


#include <iostream>
using namespace std;

struct Student {
char Surname;
char Name;
char Patronymic;
int Year;
} ;

Student& trunc(Student& X)
{
return X;
}

int main()
{ Student st;
st.Surname='Ivanov';
st.Name='Ivan';
st.Patronymic='Ivanovich';
trunc(st);
}



Проблемы возникли с написанием функции Student& trunc(Student& X), которая сокращает в структуре
имя и отчество до инициалов (с точкой) и возвращает структуру X. Помогите пожалуйста с реализацией этой функции! Проверка работы функции нужно осуществить, передав ей переменную st, и воспользоваться возвращаемым значением функции для задания года рождения.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
Возможно реализовать без использования конструктора?
"Возможно ездить на автомобиле задним ходом?" Возможно, но не все же время! Далеко не уедешь. Вот так же и здесь: если ты используешь С++ - так используй, его. А нужен непонятно как урезанный функционал - так пиши на чистых Сях, без конструкторов, ссылок и многих других вещей...

Цитата
Как работает "sprintf"?
Точно так же, как и printf, только печатает в строку, заданную первым параметром. В MSDN написано...

Цитата
Так нужно всё-таки реализовать финкцию "Student& trunc(Student& X)", и чтобы возращалась структура Х
Чтоб возвращалась "структура X" надо делать так, как я написал выше. А то, что хочешь ты - это сделать, чтобы возвращалась "ссылка на структуру X", пойми это наконец! Отсюда до ошибки - одно движение. Ну, извращайся, дело твое:
Student& trunc(Student& X)
{
sprintf(X.Name, "%c.%c", X.Name[0], (char)0);
sprintf(X.Patronymic, "%c.%c", X.Patronymic[0], (char)0);
return X;
}

int main()
{
Student st("Ivanov", "Petr", "Alekseevich");
st.Year = 1990;

trunc(st).Year = 1970; // Можно даже не запоминать результат...
cout << st.Surname << " " << st.Name << " " << st.Patronymic << " " << st.Year << endl;
return 0;
}



Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 16.03.2008 16:52) *

Отсюда до ошибки - одно движение. Ну, извращайся, дело твое:

Да так в задание написано. Тут ещё нужно проверить работу функции, если:
i) структура передается и возвращается по ссылке
ii) структура передается в функцию по ссылке, а возвращается по значению
iii) структура передается по значению, а возвращается по ссылке
iv) и передача, и возврат из функции производятся по значению


Student& trunc(Student& X)
{
sprintf(X.Name, "%c.%c", X.Name[0], (char)0);
sprintf(X.Patronymic, "%c.%c", X.Patronymic[0], (char)0);
return X;
}

int main()
{
Student st("Ivanov", "Petr", "Alekseevich");
st.Year = 1990;

trunc(st).Year = 1970; // Можно даже не запоминать результат...
cout << st.Surname << " " << st.Name << " " << st.Patronymic << " " << st.Year << endl;
return 0;
}

Это, надо понимать, первый пункт. Проблема в том, что не сокращается имя и отчество...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.09.2022 3:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name