Lỗi nhập xuất chuỗi C++

code của mình bị lỗi là nó không nhận giá trị sv[i].mssv nó bỏ qua dòng lệnh này khi chạy ,mình không biết lý do tại sao mong mọi người fix giúp thanks

#include<stdio.h>
#include<string>
#include<conio.h>
#include<iostream>
using namespace std;
 struct sinhvien
{
	char hoten[100],lop[100],mssv[100];
	float diem;
	
};

sinhvien *timperson(sinhvien &a,sinhvien &b)
{
	if (a.mssv == b.mssv)
		return &a;
	return NULL;
}
int main()
{
	int n;
	 sinhvien *ptr=NULL,sv[100];
	printf("ban hay nhap so sinh vien ");
	cin >> n;
	
	//nhap du lieu
	for (int i = 0; i < n; i++)
	{
		cout << "ma so sinh vien ";
		gets_s(sv[i].mssv);//sai chỗ này 
		cout << "ho ten ";
		gets_s(sv[i].hoten);
		cout << "lop ";
		gets_s(sv[i].lop);
		cout << "diem ";
		cin >> sv[i].diem;
	}
	cout << "yeu cau ban nhap ten cam tim kiem";
	gets_s(sv[n].mssv);
	for (int i = 0; i < n; i++)
	{
		ptr = timperson(sv[i], sv[n]);
		if (ptr != NULL)
		{
			cout << ptr->mssv;
			cout << ptr->hoten;
			cout << ptr->lop;
			cout << ptr->diem;
			break;
		}
	}

	_getch();
	return 0;
}

Trong cin sau khi bạn nhập n còn thừa 1 kí tự '\n' nên gets_s(sv[i].mssv) sẽ nhận luôn kí tự này mà ko đợi cho bạn nhập nữa. Bạn làm sạch cin đi là được

1 Like

cái đó mình biết rùi ý bạn nói nó sẽ nhận một ký tự enter đúng không ?
cái này là sai khi vòng lặp for chạy đến chỗ đó là nó bỏ qua luôn

Bạn đặt hàm cin.ignore(...) trước gets_s trong vòng for là ok ! Vòng lặp đầu tiên là '\n còn lại sau khi nhập n ở các vòng lặp tiếp theo thì '\n còn lại sau khi nhập sv[i].diem. Trước lệnh gets_s sau vòng for bạn cũng phải làm sạch cin 1 lần nữa

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