Lấy dữ liệu từ file text c++

Em đang tập code “ai là triệu phú”. Phần lấy dữ liệu từ file text vào làm thế nào để in câu hỏi và đáp án vào, sau khi người chơi trả lời nếu đúng thì in tiếp câu số 2
Em dùng c++
em cảm ơn ạ


code của em chỉ in ra câu hỏi đầu tiên và không in các câu hỏi tiếp theo

1 Like

Đăng mã đầy đủ lên đây và không cần tốn công chụp hình đâu. Ctrl + CCtrl + V.
Và cho biết cấu trúc tập tin mà bạn đọc.

3 Likes
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <unistd.h>
#include <string>
#include <iomanip>
#include <linux/sound.h> //SOUND_PCM*
using namespace std;
void CauHoi()
{	
	
	int N;
	fstream hoi("cauhoi.txt");
	hoi >> N;
	string cauhoi;
	string dapan1, dapan2, dapan3, dapan4;
	string ketqua;
	string traloi;
	bool datraloi = true;
	for (int j = 0; j < N; j++)
	{

		for( int i = 0; ! hoi.eof() ; i++ )
		{
			hoi.ignore();		
			getline(hoi,cauhoi);
			getline(hoi,dapan1);
			getline(hoi,dapan2);
			getline(hoi,dapan3);
			getline(hoi,dapan4);
			getline(hoi,ketqua);
			hoi.close();
		}
			while (datraloi == true)
			{
				cout << cauhoi << endl;
				cout << setw(5) << dapan1 << setw(30) << right << dapan2 << endl;
				cout << setw(5)	<< dapan3 << setw(30) << right << dapan4 << endl;
		
				cin >> traloi;
				if (traloi == ketqua)
				{
					datraloi = true;
					cout << "Chuc mung ban da tra loi dung cau hoi" << endl;
					sleep(5);				
					system("clear");
					
				}
				else
				{
					datraloi = false;
					cout << ketqua << " Moi la cau tra loi dung" << endl;
				}
			}
		}	
}
int main()
{
	#define 1.ogx/dev/audio
	CauHoi();
	
	return 0;
}

file text:

15
1.Dan doc huyen la ten goi khac cua dan nao?
A.Dan bau
B.Dan mot day
C. Dan nguyet
D.Dan tranh
A
2.nguoi co bao nhieu cap nhiem sac the?
A.23
B.12
C.22
D.13
A
3.Quoc hieu dau tien cua nuoc ta la gi?
A.Dai Viet
B.Van Lang
C.Dai Nam
D.Dap an khac
B
4.Ten that cua nha van To Hoai
A.Nguyen Nu
B.Tran Sen
C.Nguyen Sen
D.Dang Lan
C
5.Mot Byte bang bao nhieu bit?
A.4
B.8
C.16
D.32
B
6.Thanh nha Ho thuoc tinh nao?
A.Nghe An
B.Ha Tinh
C.Ninh Binh
D.Thanh Hoa
D
7.So nao lon nhat trong cac so sau?
A.Can bac 5 cua 5
B.Can bac 4 cua 4
C.Can bac 3 cua 3
D.Can bac 2 cua 2
B
8. So 36 chuyen thanh so nhi phan la gi?
A.010010
B.101000
C.100100
D.110000
C
9.Bong ban la mot mon the thao pho bien tren the gioi, no co nguon goc tu dau?
A.Trung Quoc
B.Phap
c.Hy Lap
D.Anh
D
10.July trong tieng anh la thang may trong nam?
A.1
B.3
C.5
D.7
D
11.Thu tuong dau tien cua Viet Nam la ai?
A.Ho Chi Minh
B.Pham Van Dong
C.Huynh Tan Phat
D.Pham Hung
A
12.Quoc gia nao co nhieu ho nuoc nhat the gioi
A.Canada
B.Trung Quoc
C.Viet Nam
D.Singapore
A
13.Moi ngay kim gio va kim phut vuong goc voi nhau bao nhieu lan? kim phut va kim giay vuong goc bao nhieu lan?
A.48/3600
B.24/3600
C.48/2880
D.24?2880
C
14.Hai loai chim thong minh nhat la loai nao?
A.Vet va Qua
B.Vet va Dieu Hau
C.Qua va Dai Bang
D.Dieu Hau va Dai Bang
A
15.Y nghia ten cau The Huc o Ha Noi la gi?
A.Giai lua vat ngang
B.Ngung tu hao quang
C.Tinh vo chong keo son
D.Anh binh minh do
B
1 Like

Đọc câu đầu tiên là đóng luôn!

Xét 2 vòng lặp lồng nhau thì chẳng ổn gì cả. Nói cho chính xác thì “tự nhiên” vô nghĩa.

Dữ liệu không nhiều nên có thể đọc 1 lần hết vào mảng của 1 cấu trúc/lớp câu hỏi. Sau đó chỉ cần lấy ra mà dùng.

struct/class CauHoi{
    string cauhoi, da1, da2, da3, da4, kq;
    // ...
}
CauHoi* chs;
void docDuLieu(){
    int N;
    hoi >> N;
    cin.ignore(); // Loại bỏ kí tự xuống dòng, sau N.
    chs = new CauHoi[N];
    // Dùng vòng lặp đọc vào từng phần tử của chs qua getline().
}

void choi(){
    // dùng chs để hiện câu hỏi.
}
3 Likes

Em cảm ơn ạ. Tại ở nhà nên thầy bảo tự tìm hiểu tự làm nên em không hiểu cái gì cả. Em cảm ơn anh

Cho em hỏi có cách nào không dùng struct không ạ

Dùng mảng song song cho nó dài dòng thêm.

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