Lỗi trong c++ - các hàm với chuỗi

Cho mình hỏi sao bài này 1 là ra toàn nam 2 là ra toàn nữ vậy mình sửa hoài không được.

#include <iostream>
#include<string.h>
#include<stdio.h>
#include<iomanip>
#include<math.h>

using namespace std;

struct SINH_VIEN
{
   char ma[10];
   char ten[150];
   bool gioi_tinh;
};

void Nhap_danh_sach(SINH_VIEN danh_sach_sinh_vien[],int si_so)
{
   for(int i=0;i<si_so;i++)
   {
       cout<<"nhap ma : ";
   	cin.getline(danh_sach_sinh_vien[i].ma,20);
       //cout<<"\n";
       cout<<"nhap ten : ";
   	cin.getline(danh_sach_sinh_vien[i].ten,20);
       //cout<<"\n";
       cout<<"gioi tinh(nam/nu) : ";
       //char gt[10];
   	char gt[10];
   	cin.getline(gt,10);
       if(strcmp(gt,"nam")==0)
       {
           danh_sach_sinh_vien[i].gioi_tinh=false;
       }
       else
       {
           danh_sach_sinh_vien[i].gioi_tinh=true;
       }
   }
}

void Xuat_danh_sach(SINH_VIEN danh_sach_sinh_vien[],int si_so)
{
   for(int i=0;i<si_so;i++)
   {
   	//cout.width(10);
       cout<<setw(10)<<danh_sach_sinh_vien[i].ma;
   	//cout.width(10);
   	cout<<setw(20)<<danh_sach_sinh_vien[i].ten;
   	//cout.width(10);
   	cout<<setw(10)<<(danh_sach_sinh_vien[i].gioi_tinh==false?"nam":"nu")<<"\n";
   	
   }
}

SINH_VIEN * tim_sinh_vien_theo_ma(SINH_VIEN danh_sach_sinh_vien[],int si_so,char matim[])
{
   for(int i=0;i<si_so;i++)
   {
   	if(stricmp(danh_sach_sinh_vien[i].ma,matim)==0)
   	{
   		return &danh_sach_sinh_vien[i];
   		//if(danh_sach_sinh_vien[i].gioi_tinh==false?"nam":"nu");
   	}
   }
   return NULL;
}

int main()
{
   int const siso=3;
   char s[5];
   SINH_VIEN danh_sach_sinh_vien[siso];
   Nhap_danh_sach(danh_sach_sinh_vien,siso);
   cout<<"danh sach sinh vien sau khi nhap : \n";
   Xuat_danh_sach(danh_sach_sinh_vien,siso);
   char matim[10];
   cout<<"nhap ma muon tim : ";
   cin.getline(matim,10);
   SINH_VIEN * pSv = tim_sinh_vien_theo_ma(danh_sach_sinh_vien,siso,matim);
   if(pSv==NULL)
   {
   	cout<<"khong tim thay ma sinh vien : "<<matim;
   }
   else
   {
   	cout<<"tim thay ma sinh vien : "<<matim<<"\n";
   	//if(danh_sach_sinh_vien[i]
   	cout<<pSv->ma<<"-"<<pSv->ten<<"-"<<pSv->gioi_tinh<<"\n";
   }
   //cout<<"Hello World";
   cout<<"moi ban nhap gioi tinh(nam/nu) : ";
   char gioi_tinh_tim[10];
   cin.getline(gioi_tinh_tim,10);
   for (int i = 0; i < siso; i++)
   {
   	bool gioi_tinh_tim_bool=true;
   	if(strcmp(gioi_tinh_tim,"nam"))
   	{
   		gioi_tinh_tim_bool=true;
   	}
   	/*else
   	{
   		gioi_tinh_tim_bool=true;
   	}*/
   	if(danh_sach_sinh_vien[i].gioi_tinh=gioi_tinh_tim_bool)
   	{
   		cout<<setw(10)<<danh_sach_sinh_vien[i].ma;
   		//cout.width(10);
   		cout<<setw(20)<<danh_sach_sinh_vien[i].ten;
   		//cout.width(10);
   		cout<<setw(10)<<(danh_sach_sinh_vien[i].gioi_tinh==false?"nam":"nu")<<"\n";
   	}
   }
   system("pause");
   return 0;
}

Trong quá trình tìm kiếm, bạn đã gán giá trị gioi_tinh trong if luôn rồi. Double kill!.

2 Likes

ở phần nào anh cắt ra cho em được không em sẽ cung cấp hình ạ

if cuối cùng. == hay =.

2 Likes

dạ em tìm ra rồi cảm ơn anh

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?