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
将导致在最后一次迭代中进行越界访问。