30/09/2018, 18:50

Lỗi nhập xuất chuỗi trong 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
#include<conio.h>
#include
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;

}

tvp viết 21:01 ngày 30/09/2018

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

Thất Học viết 20:53 ngày 30/09/2018

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

tvp viết 21:02 ngày 30/09/2018

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

Bài liên quan
0