#c
#c
Вопрос:
Как я могу инициализировать объект person
с помощью строки, прочитанной из std::cin
?
Класс ListElement
представляет связанный список.
#include <iostream>
using namespace std;
struct Stuff {
char* name;
char* surname;
Date birthday; // Also a struct Date
};
struct ListElement {
struct Stuff* person; // Pointer to struct Stuff
struct ListElement* next; // Pointer to the next Element
};
int main() {
char input_name[50];
cin >> input_name >> endl;
ListElement* const start = new ListElement();
ListElement* actual = start;
start->next = NULL;
*actual->person->name = input_name; // not working :(
}
Комментарии:
1. О, ваш код протекает. C — это не Java.
2. Подумайте дважды, что
*actual
бы сделать с.actual
Он разыменовывает указатель и, следовательно*actual->person
, синтаксически неверен. Хотя, как упоминали другие, даже если вы скомпилируете свою программу, в ней будет много ошибок и недостатков.
Ответ №1:
Для этих определений структуры main должен выглядеть следующим образом
#include <cstring>
//...
int main() {
char input_name[50];
cin >> input_name >> endl;
ListElement* const start = new ListElement();
ListElement* actual = start;
actual->person = new Stuff();
actual->person->name = new char[std::strlen( input_name ) 1];
std::strcpy( actual->person->name, input_name );
// other code including deleting of all allocated memory
}
Ответ №2:
Попробуйте что-то подобное:
#include <iostream>
#include <list>
#include <string>
using namespace std;
struct Stuff
{
string name;
};
int main() {
list<Stuff> res;
string in;
cin>>in;
res.push_back(Stuff{.name=in});
for(Stuffamp; p : res)
cout<<p.name<<endl;
return 0;
}
Сборник:
g test.cpp -std=c 0 -o test
без c containeurs:
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
struct Stuff {
char* name;
char* surname;
Date birthday; // Also a struct Date
};
struct ListElement {
struct Stuff* person; // Pointer to struct Stuff
struct ListElement* next; // Pointer to the next Element
};
int main() {
ListElement l;
string in;
cin>>in;
char* name = new char[in.size() 1];// 1 for
::strcpy(name,in.c_str());
Stuff* tmp = new Stuff{
.name=name,
.surname = nullptr,
//.birthday = date
};
l.person = tmp;
l.next = nullptr;
//do not forget to free Stuff.name
return 0;
}
Комментарии:
1. Можете ли вы уточнить, каким образом этот код относится к вопросу?
2. Это то же самое, но с контейнерами c .
3. Ерунда, это не «то же самое с контейнерами» . По крайней мере, тогда вы пропустили
Stuff
структуру.4. Хорошо, теперь это то же самое, но с неполной структурой. Только минимальный.
5. мне не разрешено изменять структуры… они предопределены