我写了一个c ++代码并使用了struct,我想比较struct type中的两个字符串。但是出现错误:
#include <iostream>
using namespace std;
#define NumOfStudents 2
#define NumOfCourses 3
struct Student{
int stdnum, FieldCode, age;
double average, marks, res[NumOfCourses];
char Fname[20], Lname[20], cmp[20];
};
int main(){
struct Student students[NumOfStudents];
int i, j;
// char cmp[20];
cout << "\t **********************************************************************\n";
cout << "\t *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\n";
cout << "\t *+ FIRST-NAME || LAST-NAME || STUDENT-NUMBER || FIELD-CODE || AGE +*\n";
cout << "\t *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*\n";
cout << "\t **********************************************************************\n";
for(i=0; i<NumOfStudents; i++){
cout << "STUDENT #" << i+1 << ": ";
cin >> students[i].Fname >> students[i].Lname >> students[i].stdnum >> students[i].FieldCode >> students[i].age;
}
cout << "what student do you want?[Enter family]\n";
cin >> students[j].cmp;
for(i=0; i<NumOfStudents; i++){
if(students[j].cmp == students[j].Lname){ //The error occurs here
for(j=0; j<NumOfCourses; j++){
cout << "\nCOURCE #" << j+1 << ": ";
cin >> students[j].marks;
}
}
else
cout << "The Student with name " << students[j].cmp << " doesn't exist!!!";
}
return 0;
}
在我评论的代码中,发生错误......
谢谢
答案 0 :(得分:3)
当然这个比较
if(students[j].cmp == students[j].stdnum){
无效,因为数据成员cmp的类型为char[20]
,而stdnum的类型为int
。目前尚不清楚你要比较什么。
编辑:我看到你更新了你的帖子并写了
if(students[j].cmp == students[j].Lname){
但是此语句也无效,因为数组没有比较运算符。在这种情况下,两个数组都转换为指向其第一个元素的指针,并比较指针。所以条件总是等于假。相反,你必须使用strandard C函数strcmp
if( std::strcmp( students[j].cmp, students[j].Lname ) == 0 ){
如果你使用std :: string而不是字符数组会更简单。您需要包含标题<string>
在这种情况下,结构将按以下方式显示
struct Student{
int stdnum, FieldCode, age;
double average, marks, res[NumOfCourses];
string Fname, Lname, cmp;
};
你可以使用比较运算符
if( students[j].cmp == students[j].Lname ){
答案 1 :(得分:1)
这应该适合你。
if(strcmp(students[i].cmp, students[i].Lname) == 0)
答案 2 :(得分:0)
如果您确定使用char
字符串,则应使用strcmp
函数来比较它们。
(http://www.cplusplus.com/reference/cstring/strcmp/)
答案 3 :(得分:0)
您正在使用没有赋值的变量j
。因此,您正在访问数组中的未知成员,可能是数组边界之外的某个(大于NumOfStudents
的索引)。
我认为你想要if(students[i].cmp == students[i].stdnum){
而不是if(students[j].cmp == students[j].stdnum){
,但是,应该注意你要比较两个char
数组,这两个数组没有比较两个字符串的预期效果。它可能会比较内存中数组的位置(总是会计算为false
)。而是使用strcmp,并在处理cstrings(char数组)时使用<cstring>
库中的命令。
或者只是省去麻烦并使用string类,它会重载=运算符,并允许您使用=
比较两个字符串。