#include <iostream>
using namespace std;
struct stud
{
char name[10];
int id;
};
int input(stud a[], int size)
{
for(int i=1; i<=size; i++)
{
cout<<"name = ";
cin>>a[i].name;
cout<<"id = ";
cin>>a[i].id;
}
cout<<endl;
return 0;
}
int output(stud a[], int size)
{
for(int i=1; i<=size; i++)
{
cout<<"name = "<<a[i].name<<" ";
cout<<"id = "<<a[i].id<<" ";
}
cout<<endl;
return 0;
}
int copy(stud a[], stud x[], int size)
{
for(int i=1; i<=size; i++)
{
x[i].name=a[i].name;
x[i].id=a[i].id;
}
output(x,size);
cout<<endl;
return 0;
}
int main()
{
struct stud s[3], x[3];
input(s,3);
output(s,3);
copy(s,x,3);
return 0;
}
在此程序中,函数copy x[i].name =a[i].name;
中的语句未将内容从1个结构对象复制到另一个。我试图将此语句放入for循环for(int j=1;j<=10;j++) x[i].name[j] =a[i].name[j];
中,但仍然无法正常工作。
请提出应该更改的内容或一些替代方法。
为此我会非常感谢。
致谢, umar
答案 0 :(得分:0)
要么使用循环复制name
字段中的每个字符,要么使用strcpy
标头中的<cstring>
函数。
int copy(stud a[], stud x[], int size) {
for(int i = 1; i <= size; i++) {
// for(unsigned j = 0; j < 10; j++) {
// x[i].name[j] = a[i].name[j];
// }
strcpy(x[i].name, a[i].name);
x[i].id = a[i].id;
}
output(x, size);
cout << endl;
return 0;
}
但是由于您已将其标记为c++
,因此请考虑使用std::string
而不是char数组,除非有特殊原因要使用char数组。在这种情况下,x[i].name = a[i].name
可以正常工作,您也可以使用标准的algorithm
库进行复制。另外,为您使用std::array
而不是原始的C数组“结构数组”可能是更好的选择(不会像常规C数组那样退化为指针)。
答案 1 :(得分:0)
Evrey循环中的单个循环是错误的,因为在C ++中,数组从零开始。所以不是
for(int i=1; i<=size; i++)
代替
for(int i=0; i<size; i++)
您无法通过写入a = b;
复制阵列。由于您的数组实际上是字符串,因此有一个内置函数strcpy
复制字符串。
strcpy(x[i].name, a[i].name);