C++ 在cpp中使用结构和函数的多学生条目

C++ 在cpp中使用结构和函数的多学生条目,c++,function,struct,C++,Function,Struct,我对学生使用了多重输入结构。但我在以下代码中遇到错误: #include <iostream> using namespace std; struct Student{ char stuName[30]; int stuRollNo; int stuAge; }; void printStudentInfo(struct Student s[]); int main(){ int i; for(i=0;i<3;i++){ Studen

我对学生使用了多重输入结构。但我在以下代码中遇到错误:

#include <iostream>
using namespace std;
struct Student{
   char stuName[30];
   int stuRollNo;
   int stuAge;
};

void printStudentInfo(struct Student s[]);

int main(){
    int i;
    for(i=0;i<3;i++){
   Student s[i];
   cout<<"Enter Student Name: ";
   cin.getline(s[i].stuName, 30);
   cout<<"Enter Student Roll No: ";
   cin>>s[i].stuRollNo;
   cout<<"Enter Student Age: ";
   cin>>s[i].stuAge;
   printStudentInfo(s[i]);}
   return 0;
}

void printStudentInfo(struct Student s[i]){
   cout<<"Student Record:"<<endl;
   cout<<"Name: "<<s[i].stuName<<endl;
   cout<<"Roll No: "<<s[i].stuRollNo<<endl;
   cout<<"Age: "<<s[i].stuAge;
}
#包括
使用名称空间std;
结构学生{
char-stuName[30];
内斯特罗尔诺;
国际贸易;
};
无效printStudentInfo(结构学生s[]);
int main(){
int i;

对于(i=0;i)有几个错误。当使用C++时,请考虑使用正确的对象,如代码> STD::String < /Cord>存储学生姓名。此外,与C不同,在传递函数参数时,不必指定Stult关键字。 另外,您将结构传递给
printStudentInfo()
函数的方式是错误的。此外,如果可能,我建议不要使用
名称空间std

下面是对您的代码的一个最小更正(请注意,它可以进一步改进,我只是让它勉强工作):

#包括
#包括
结构学生{
std::string stuName;
内斯特罗尔诺;
国际贸易;
};
无效打印学生信息(const Student&s);
int main()
{
学生s[3];
对于(int i=0;i几个点:

  • 首先,代码没有缩进。请使用IDEs代码美化选项或使用一些联机选项缩进代码。示例:

  • 出于学习目的,
    使用namespace std;
    是可以的。但是,请尽量避免使用更严重的代码。有关详细信息,请阅读此线程:

  • Student
    类型中,成员的前缀为
    stu
    ,这是多余的,因为它们已经是正确命名类型的一部分,即
    Student
    ,并且会在代码中被有意义的命名对象引用。简单而直接的成员名称,如
    name
    rollno
    age
    就够了

  • 学生姓名的成员是一个带有幻数(即30)的
    char
    数组。尝试学习和使用更安全、更直接的数组。并且,始终避免使用幻数。使用
    const
    constepr
    (如果是C++11或更高版本)为幻数使用专有名称,或
    #根据您的要求定义
    宏替换。例如,
    #定义名称#长度30

  • 在C++中,您不需要使用前缀<代码>结构>代码>到处引用除定义或前向声明之外的类型。因此,<代码>无效的PrtPrimeEngIn(结构学生S[]);将是<代码>无效的PrtPrimeEngIn(学生S[]);< < /P>
  • 函数
    printStudentInfo
    应该只打印一个
    Student
    类型的对象,因此带有参数
    s[]
    的下标运算符是多余的。在这种情况下,此参数的正确类型应该是
    Student s
    ,即
    void printStudentInfo(Stdudent s)在C++中,有多种方法将参数传递给函数,例如传递值和传递引用。在上下文中,通过引用更为合理,即ValuePrimtStudio信息(const Stand & S)。
    
  • 同样,数组大小是一个神奇的数字。使用一个带有适当名称的常量,例如
    MAX\u STUDENTS

  • 在C++中,声明并定义循环内的循环控制变量:
    for(int i=0;…)

  • 在循环外部声明
    Student s[i];
    在循环中,这意味着每次循环以新的变量大小(即0、1、2)迭代时都会创建它。这在这里不是有意的。将它移到外部,并使用常量作为其大小,例如
    Student s[MAX\u STUDENTS];
    。相关线程:。将来,当您熟悉STL(标准模板库)时,请使用

  • 杂项(您可以边学习边进行):数组初始化、
    std::endl
    vs
    \n
    无符号的
    vs
    有符号的
    (对于年龄、rollno,…)、
    std::size\u t
    ,等等

下面是一个工作示例():

#包括
#包括
体类型
{
std::字符串名;
int-rollno;
智力年龄;
};
无效打印学生信息(const Student&s);
int main()
{
const int MAX_STUDENTS=3;
学生s[MAX_STUDENTS];
对于(int i=0;is[i].年龄;
printStudentInfo(s[i]);
}
返回0;
}
无效打印学生信息(const Student&s)
{

STD:你使用C++标准的IDE?IDE?编译器?好答案!你可以解释<代码>(i)STD::CIN。
main.cpp:29:25: error: cannot convert ‘Student’ to ‘Student*’ for argument ‘1’ to ‘void printStudentInfo(Student*)’
    printStudentInfo(s[i]);} 
                         ^
main.cpp: At global scope:
main.cpp:33:40: error: ‘i’ was not declared in this scope
 void printStudentInfo(struct Student s[i]){ 
                                        ^
main.cpp: In function ‘void printStudentInfo(...)’:
main.cpp:35:20: error: ‘s’ was not declared in this scope
    cout<<"Name: "<<s[i].stuName<<endl; 
                    ^
main.cpp:35:22: error: ‘i’ was not declared in this scope
    cout<<"Name: "<<s[i].stuName<<endl;
#include <iostream>
#include <string>

struct Student{
   std::string stuName;
   int stuRollNo;
   int stuAge;
};

void printStudentInfo(const Student& s);

int main()
{
    Student s[3];
    for(int i=0;i<3;i++)
    {
        std::cout<<"Enter Student Name: ";

        if (i) std::cin.ignore();
        std::getline(std::cin, s[i].stuName);

        std::cout<<"Enter Student Roll No: ";
        std::cin>>s[i].stuRollNo;

        std::cout<<"Enter Student Age: ";
        std::cin>>s[i].stuAge;

        printStudentInfo(s[i]);
   }
   return 0;
}

void printStudentInfo(const Student& s){
   std::cout<<"Student Record:"<<std::endl;
   std::cout<<"Name: "<<s.stuName<<std::endl;
   std::cout<<"Roll No: "<<s.stuRollNo<<std::endl;
   std::cout<<"Age: "<<s.stuAge<<std::endl;
}
#include <iostream>
#include <string>

struct Student
{
    std::string name;
    int         rollno;
    int         age;
};

void printStudentInfo( const Student& s );

int main()
{
    const int MAX_STUDENTS = 3;
    Student s[MAX_STUDENTS];

    for ( int i = 0; i < MAX_STUDENTS; ++i )
    {
        std::cout << "Enter Student Name: ";
        std::getline( std::cin, s[i].name );

        std::cout << "Enter Student Roll No: ";
        std::cin >> s[i].rollno;

        std::cout << "Enter Student Age: ";
        std::cin >> s[i].age;

        printStudentInfo( s[i] );
    }

    return 0;
}

void printStudentInfo( const Student& s )
{
    std::cout << "Student Record:\n"
              << "Name    : " << s.name << '\n'
              << "Roll No : " << s.rollno << '\n'
              << "Age     : " << s.age << '\n';
}