C++ 指向结构数组的指针仅显示字符字段的第一个字符
我有以下代码:C++ 指向结构数组的指针仅显示字符字段的第一个字符,c++,arrays,pointers,char,C++,Arrays,Pointers,Char,我有以下代码: #include <iostream> using namespace std; struct Materie { //grades float romana; float matematica; float fizica; }; struct Elev { // students structure, name, prename and grade obtained; char nume[30]; char p
#include <iostream>
using namespace std;
struct Materie { //grades
float romana;
float matematica;
float fizica;
};
struct Elev { // students structure, name, prename and grade obtained;
char nume[30];
char prenume[30];
Materie nota;
};
void absolvent(Elev* elevi, int &n) { // fuction to remove studens with grade < 5
for (int i = 0; i < n; i++) {
if (elevi[i].nota.fizica < 5.0 || elevi[i].nota.matematica < 5.0 || elevi[i].nota.fizica < 5.0) {
for (int j = i; j < n; j++) {
*elevi[j].nume = *elevi[j + 1].nume;
*elevi[j].prenume = *elevi[j + 1].nume;
elevi[j].nota.romana = elevi[j + 1].nota.romana;
elevi[j].nota.matematica = elevi[j + 1].nota.matematica;
elevi[j].nota.fizica = elevi[j + 1].nota.fizica;
}
n--;
i--;
}
}
}
int main() {
int n;
do {
cout << "Introduceti numarul de elevi: ";
cin >> n;
if (n < 0 || n > 30) {
cout << "0 < n < 30";
}
} while (n < 0 || n > 30);
Elev* elevi = new Elev[n];
for (int i = 0; i < n; i++) {
cout << "Introduceti numele elevului " << i + 1 << " : ";
cin >> elevi[i].nume;
cout << "Introduceti prenumele elevului " << i + 1 << " : ";
cin >> elevi[i].prenume;
cout << "Introduceti nota obtinuta la limba romana: ";
cin >> elevi[i].nota.romana;
cout << "Introduceti nota obtinuta la matematica: ";
cin >> elevi[i].nota.matematica;
cout << "Introduceti nota obtinuta la fizica: ";
cin >> elevi[i].nota.fizica;
}
cout << elevi[0].nume << endl;
cout << *elevi[0].nume << endl;
return 0;
}
#包括
使用名称空间std;
结构材料{//等级
罗曼娜;
漂浮金属;
浮萍;
};
struct Elev{//获得的学生结构、姓名、学名和成绩;
char nume[30];
char-prenume[30];
材料公证;
};
无效免除(Elev*elevi,int&n){//移除等级<5的双头螺栓的功能
对于(int i=0;in;
如果(n<0 | | n>30){
cout(30);
标高*标高=新标高[n];
对于(int i=0;ielevi[i].nota.fizica;
}
cout之所以*elevi[j].nume
只显示第一个字符,是因为它与elevi[j].nume[0]
相同,这一点更为明显
您不能分配给数组,但可以分配给包含数组的结构和类,解决方案比您假设的要简单得多
for (int j = i; j < n-1; j++) {
elevi[j] = elevi[j+1];
}
for(int j=i;j
会做你想做的事。
(请注意,您需要降低循环的末尾,否则将超出有效索引。)*elevi[j].nume=*elevi[j+1].nume;
--这不是复制C样式字符数组的方式。使用=
无法复制数组。请使用strcpy
。如果确实需要使用char
数组而不是std::string
,您应该了解strcpy
和其他以空结尾的字节字符串函数,也可以使用(int j=i;j
--如果n
是项目数,那么访问项目j+1
将导致在最后一次迭代中进行越界访问。