if语句中的struct的比较字符串

时间:2014-02-04 19:37:28

标签: c++ arrays string struct

我写了一个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;
}

在我评论的代码中,发生错误......

谢谢

4 个答案:

答案 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类,它会重载=运算符,并允许您使用=比较两个字符串。