Nhập string bị bỏ qua

#pragma once
#include<iostream>
#include<string>
using namespace std;

struct sach {
	string tensach;
	string masach;
	int giatien;
	int soluong;
};
struct Node
{
	sach data;
	Node* link;
};
typedef Node* NODEPTR;
typedef NODEPTR LIST;
LIST list;

void inIt(NODEPTR& list) {
	list = NULL;
}
void insert(sach& book) {
	cout << "Ten sach: ";
	getline(cin, book.tensach);
	fflush(stdin);
	cout << "Ma sach: ";
	fflush(stdin);
	getline(cin,book.masach);
	fflush(stdin);
	cout << "nhap gia tien cua sach: ";
	cin >> book.giatien;
	cout << "so luong cua sach: ";
	cin >> book.soluong;
	fflush(stdin);
}
void printName(NODEPTR list)
{
	NODEPTR p = list;
	while (p != NULL)
	{
		cout << p->data.tensach << " ";
		p = p->link;
	}
}
void printData(sach book) {
	cout << "Ten sach: " << book.tensach << endl;
	cout << "Ma sach: " << book.masach << endl;
	cout << "Gia tien: " << book.giatien << endl;
	cout << "So luong: " << book.soluong << endl;
}

void display(NODEPTR list) {
	Node* p = list;
	while (p != NULL) {
		printData(p->data);
		p = p->link;
	}

}

Node* makeNode(sach& sach) {
	NODEPTR p = new Node;
	p->data = sach;
	p->link = NULL;
	return p;
}
void addList(LIST& list, sach book) {
	NODEPTR newNode = makeNode(book);
	if (list == NULL) {
		list = newNode;
	}
	else {
		NODEPTR p = list;
		while (p->link != NULL) {
			p = p->link;
		}
		p->link = newNode;
	}
}

void addBook(LIST& list, sach book)
{
	int soluong;
	cout << "Nhap so luong sach : ";
	cin >> soluong;
	for (int i = 0; i < soluong; i++) {
		insert(book);
		addBook(list, book);
	}
}
// thieu chuc nang tim kiem
// thieu chuc nang tinh tien sach tuong ung
// thieu tinh nang tinh toan bo tien sach cua thu vien
// thieu chuc nang xoa 
// thieu chuc nang sua
int main() {
	NODEPTR list;
	sach book;
	//sach Sach_1 = { "dac nhan tam",self - help,	// nhap san 5 sach vao thu vien
		//	cout << "\n chao mung den voi thu vien";
		//	cout << "\n chon so tuong ung doi voi chuc nang cua chuong trinh";
		//	cout << "1:nhap sach ve thu vien.";
		//	cout << "2:tim sach.";
		//	cout << "3:tinh tien sach tuong ung";
		//	cout << "4:tinh tong tien cua toan bo sach co trong thu vien";
		//	cout << "5:sua thong tin sach";
		//	cout << "6:xoa sach khoi thu vien";
		//	int chucnang;
		//	cin >> chucnang;
		//	switch (chucnang)
		//	{
		//	case 1: addBook(list,book);
		//		break;
		//	case 2:
		//	}
	inIt(list);
	for (int i = 0; i < 5; i++) {
		cout << "Nhap thong tin cuon sach thu " << (i + 1) << ":" << endl;
		insert(book);
		addList(list, book);
	}
	cout << "Danh sach cac cuon sach trong thu vien:" << endl;
	display(list);

}

chào mọi người, em đang có cái đồ án tin học làm thư viện sách mà bị lỗi như này : em nhập sách được quyển 1 thì ok nhưng tới quyển 2 -> 5 thì bị bỏ qua cái tên ( chỉ nhập được mã sách , giá , số lượng. ban đầu em có hỏi bạn dùng Cin.getline(book.tensach,100) nhưng chạy không được

Ở đoạn này thì cin>> sẽ không đọc kí tự newline khi nhấn Enter nên khi getline() nó sẽ hiểu nhầm là mình vừa nhấn Enter xuống dòng nữa.

Giải pháp ở đây là có thể dùng cin.ignore() để bỏ qua kí tự newline đó:

	cout << "so luong cua sach: ";
	cin >> book.soluong;
	cin.ignore(); // Ở đây
3 Likes

ah em cảm ơn anh, lỗi đó em sửa được rồi ạ

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