如何在 C++ 中对结构内的结构进行动态赋值?
How can I do dynamic assignment to a struct inside a struct in C++?
目前我正在使用 C++ 对结构内的结构进行动态分配。所以,我做了一个我认为可以动态分配的代码。
这是我制作的代码:
#include<iostream>
using namespace std;
int cnt = 0;
struct num{
int x;
int y;
};
struct name {
char Stu[30] = { 0 };
num *number;
};
int input(int& a) {
if (cnt == 0) {
cout << "입력할 수 : ";
cin >> a;
cnt++;
return a;
}
if (cnt == 1) {
cout << "입력할 수 : ";
cin >> a;
cnt++;
}
}
void input(char *pt) {
if (cnt == 2) {
cout << "입력할 글자 : ";
cin >> pt;
cnt++;
}
}
int inputnum(int i) {
cout << "할당할 숫자를 쓰시오 : ";
cin >> i;
return i;
}
void printdata(name *pSt, int i, int j) {
cout << pSt[i].number[j].x << endl;
cout << pSt[i].number[j].y << endl;
cout << pSt[i].Stu << endl;
}
int main() {
int num1 = 0;
int num2 = 0;
num1 = inputnum(num1);
num2 = inputnum(num2);
name* student = new name[num1];
for (int i = 0; i < num1; i++) {
for (int j = 0; j < num2; j++) {
student[i].number = new num[num2];
input(student[i].number[j].x);
input(student[i].number[j].y);
input(student[i].Stu);
cnt = 0;
}
}
for (int i = 0; i < num1; i++) {
for (int j = 0; j < num2; j++) {
printdata(student, i, j);
}
}
}
但是如果我在 num2 中输入超过 2 个,输出数字会很奇怪,比如 -842150451。
如何在 C++ 中对结构内的结构进行动态赋值?
您的代码有几个问题。
首先,使用std::string
代替char[30]
。其次,除非必要,否则不要分配内存。不需要num* number
。使用 std::vector
.
你可以把你的代码如下:
struct num {
int x;
int y;
};
struct name {
std::string Stu;
std::vector<num> number;
};
-842150451
不是一个奇怪的数字。它是 0xCDCDCDCD 的十进制。这是 Microsoft 调试 CRT 用来表示未初始化堆内存的值。参见 here。
关于input
个函数,你为什么不写一些更简单的函数呢?
void input_x(int& x)
{
cout << "입력할 수 : ";
cin >> x;
}
void input_y(int& y)
{
cout << "입력할 수 : ";
cin >> y;
}
void input_s(char *pt)
{
cout << "입력할 글자 : ";
cin >> pt;
}
您可以按如下方式使用:
for (int i = 0; i < num1; i++) {
for (int j = 0; j < num2; j++) {
student[i].number = new num[num2];
input_x(student[i].number[j].x);
input_y(student[i].number[j].y);
input_s(student[i].Stu);
}
}
input_s
应该使用 std::string
,不过,如果您使用我上面建议的方法:
void input_s(std::string& pt)
{
cout << "입력할 글자 : ";
cin >> pt;
}
至于 name* student
你可以用 std::vector<name>
:
代替
std::vector<name> student;
for (int i = 0; i < num1; i++) {
for (int j = 0; j < num2; j++) {
name s;
s.number.resize(num2);
input(s.number[j].x);
input(s.number[j].y);
input(s.Stu);
student.push_back(s);
}
}
目前我正在使用 C++ 对结构内的结构进行动态分配。所以,我做了一个我认为可以动态分配的代码。 这是我制作的代码:
#include<iostream>
using namespace std;
int cnt = 0;
struct num{
int x;
int y;
};
struct name {
char Stu[30] = { 0 };
num *number;
};
int input(int& a) {
if (cnt == 0) {
cout << "입력할 수 : ";
cin >> a;
cnt++;
return a;
}
if (cnt == 1) {
cout << "입력할 수 : ";
cin >> a;
cnt++;
}
}
void input(char *pt) {
if (cnt == 2) {
cout << "입력할 글자 : ";
cin >> pt;
cnt++;
}
}
int inputnum(int i) {
cout << "할당할 숫자를 쓰시오 : ";
cin >> i;
return i;
}
void printdata(name *pSt, int i, int j) {
cout << pSt[i].number[j].x << endl;
cout << pSt[i].number[j].y << endl;
cout << pSt[i].Stu << endl;
}
int main() {
int num1 = 0;
int num2 = 0;
num1 = inputnum(num1);
num2 = inputnum(num2);
name* student = new name[num1];
for (int i = 0; i < num1; i++) {
for (int j = 0; j < num2; j++) {
student[i].number = new num[num2];
input(student[i].number[j].x);
input(student[i].number[j].y);
input(student[i].Stu);
cnt = 0;
}
}
for (int i = 0; i < num1; i++) {
for (int j = 0; j < num2; j++) {
printdata(student, i, j);
}
}
}
但是如果我在 num2 中输入超过 2 个,输出数字会很奇怪,比如 -842150451。 如何在 C++ 中对结构内的结构进行动态赋值?
您的代码有几个问题。
首先,使用std::string
代替char[30]
。其次,除非必要,否则不要分配内存。不需要num* number
。使用 std::vector
.
你可以把你的代码如下:
struct num {
int x;
int y;
};
struct name {
std::string Stu;
std::vector<num> number;
};
-842150451
不是一个奇怪的数字。它是 0xCDCDCDCD 的十进制。这是 Microsoft 调试 CRT 用来表示未初始化堆内存的值。参见 here。
关于input
个函数,你为什么不写一些更简单的函数呢?
void input_x(int& x)
{
cout << "입력할 수 : ";
cin >> x;
}
void input_y(int& y)
{
cout << "입력할 수 : ";
cin >> y;
}
void input_s(char *pt)
{
cout << "입력할 글자 : ";
cin >> pt;
}
您可以按如下方式使用:
for (int i = 0; i < num1; i++) {
for (int j = 0; j < num2; j++) {
student[i].number = new num[num2];
input_x(student[i].number[j].x);
input_y(student[i].number[j].y);
input_s(student[i].Stu);
}
}
input_s
应该使用 std::string
,不过,如果您使用我上面建议的方法:
void input_s(std::string& pt)
{
cout << "입력할 글자 : ";
cin >> pt;
}
至于 name* student
你可以用 std::vector<name>
:
std::vector<name> student;
for (int i = 0; i < num1; i++) {
for (int j = 0; j < num2; j++) {
name s;
s.number.resize(num2);
input(s.number[j].x);
input(s.number[j].y);
input(s.Stu);
student.push_back(s);
}
}