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';
}