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;
}
Trong
cin
sau khi bạn nhậpn
còn thừa 1 kí tự'\n'
nêngets_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ạchcin
đi là đượccá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ướcgets_s
trong vòng for là ok ! Vòng lặp đầu tiên là'\n
còn lại sau khi nhậpn
ở các vòng lặp tiếp theo thì'\n
còn lại sau khi nhậpsv[i].diem
. Trước lệnhgets_s
sau vòng for bạn cũng phải làm sạchcin
1 lần nữa