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


Гость






Цитата
 char s1,s2;
s1=X.Name;
Ну, ты же опять совершаешь ту же самую ошибку... С массивами символов надо работать, а не с символами, чтоб строку представить... Кроме того, строку нельзя копировать через "=", нужно использовать для этого strcpy...

Кстати, тебе обязательно извращаться с возвратом ссылки? Не проще вернуть новый объект из функции:

struct Student {
Student(const char *sn, const char *n, const char *p) {
strcpy(Surname, sn); strcpy(Name, n); strcpy(Patronymic, p);
}

char Surname[255]; // Вообще-то лучше было бы описать все как char * и выделить память
char Name[255];
char Patronymic[255];

int Year;
};

Student trunc(Student& X)
{
// Исправлено, раньше был не совсем корректный вариант...
char n[4], pn[4];
sprintf(n, "%c.%c", X.Name[0], (char)0);
sprintf(pn, "%c.%c", X.Patronymic[0], (char)0);
return Student(X.Surname, n, pn);
}

int main()
{
Student st("Ivanov", "Ivan", "Ivanovich");
Student s = trunc(st);
cout << s.Surname << " " << s.Name << " " << s.Patronymic << endl;
return 0;
}


?

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

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


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

 





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