C++ C++;,使用if/else在struct中返回值

C++ C++;,使用if/else在struct中返回值,c++,struct,C++,Struct,我正在学习“struct”,我不明白它为什么不根据条件从struct返回值。这是我的密码: #include <iostream> struct Student{ char name[15]; unsigned char mark; }; struct Group{ Student *students; size_t size; }; int main() { const size_t N = 2; std::cout <

我正在学习“struct”,我不明白它为什么不根据条件从struct返回值。这是我的密码:

#include <iostream>


struct Student{
    char name[15];
    unsigned char mark;
};

struct Group{
    Student *students;
    size_t size;
};

int main()
{
    const size_t N = 2;

    std::cout << "Student(s) we have: " << std::endl;

    Group group;
    group.size = N;
    group.students = new Student[N];

    for(size_t i = 0; i < N; ++i)
    {
        Student &input = group.students[i];
        std::cout << "Student #" << i + 1 << ": ";
        std::cin >> input.name;
        std::cout << "Score: ";
        std::cin >> input.mark;
    }

    for(int i = 0; i < N; ++i)
    {
        const Student &dummys = group.students[i];
        if(dummys.mark == 5) std::cout << dummys.name << std::endl;
    }

    delete[] group.students;

    return 0;
}
#包括
结构学生{
字符名[15];
无符号字符标记;
};
结构组{
学生*学生;
大小;
};
int main()
{
常数大小N=2;

std::cout将标记存储在
unsigned char
中,因此当您使用
std::cin>>input.mark;
并键入“5”键入的值不会解析为整数类型,而是保存为带整数值53的“5”字符(来自ASCII表)。
您可以使用
dummys.mark=='5'
比较并使代码正常工作。

if(dummys.mark==5)
替换为
if(dummys.mark=='5')
并在Student结构声明中再次尝试或将char替换为int[对于变量mark!!]离题:对文本而不是字符数组使用
std::string
std::string
类型可以动态增长,而字符数组具有固定容量,并且很容易溢出。