Hỏi về đồng hồ đếm ngược trong bài tập thi trắc nghiệm c++

Chào mọi người em đang là sinh viên năm 2 đang làm bài tập lớn về chương trình thi trắc nghiệm cho sinh viên. Thầy yêu cầu khi sinh viên chọn số phút thi thì phải điền đáp án trong khoảng thời gian đó. Hiện em đang bị lỗi chỗ nếu như để thời gian tự chạy hết thì chương trình đứng và lỗi luôn còn nếu nộp bài trước khi thời gian kết thúc thì hoạt động bình thường thì có cách nào xử lý không ạ. Em cảm ơn ạ.

    struct ThoiGian
    {
    	int Gio;
    	int Phut;
    	int Giay;
    };
    void WriteBlockChar(wchar_t* Arraych, int row, int col, int x, int y, int color)
    {
    	CHAR_INFO* charater = new CHAR_INFO[row * col];
    	for (int i = 0; i < row * col; i++) 
    	{
    		charater[i].Attributes = color;
    		charater[i].Char.UnicodeChar = Arraych[i];
    	}
    	COORD sizebuff = { col,row };
    	COORD pos = { 0,0 };
    	SMALL_RECT earea = { x,y,x + col - 1,y + row - 1 };
    	WriteConsoleOutput(GetStdHandle(STD_OUTPUT_HANDLE), charater, sizebuff, pos, &earea);
    	delete[] charater;
    }

    wchar_t InToA(int k)
    {
    	switch (k) 
    	{
    	case 0: return L'0';
    	case 1: return L'1';
    	case 2: return L'2';
    	case 3: return L'3';
    	case 4: return L'4';
    	case 5: return L'5';
    	case 6: return L'6';
    	case 7: return L'7';
    	case 8: return L'8';
    	case 9: return L'9';
    	default: return L' '; // Return a space if not a valid digit
    	}
    }

    bool DoiGio(ThoiGian* h) 
    {
    	if (h->Giay > 0)
    	{
    		--h->Giay;
    	}
    	else if (h->Phut > 0) 
    	{
    		h->Giay = 59;
    		--h->Phut;
    	}
    	else if (h->Gio) 
    	{
    		--h->Gio;
    		h->Phut = 59;
    		h->Giay = 59;
    	}
    	else return 0;
    	return 1;
    }

    void ThemVaoChuoi(wchar_t* h, ThoiGian* j) 
    {
    	int bait = 0;
    	bait = j->Giay;
    	h[7] = InToA(bait % 10);
    	h[6] = InToA(bait /= 10);
    	bait = j->Phut;
    	h[4] = InToA(bait % 10);
    	h[3] = InToA(bait /= 10);
    	bait = j->Gio;
    	h[1] = InToA(bait % 10);
    	h[0] = InToA(bait /= 10);
    }

    void InDongHo(int phut) 
    {
    	ThoiGian h = { 0, phut, 0 };
    	wchar_t a[8] = { L'0',L'0',L':',L'0',L'0',L':',L'0',L'0' };
    	while (stop) 
    	{
    		if (!DoiGio(&h)) stop = 0;
    		ThemVaoChuoi(a, &h);
    		WriteBlockChar(a, 1, 8, 70, 3, 0x004);
    		Sleep(950);
    	}
    	return;
    }
PHẦN HÀM MAIN:
    						cout << "Nhap so phut thi: ";
    						cin >> thoigianthi;

    						clock = thread(InDongHo, thoigianthi);
    						stop = true;

    						for (int i = 0; i < soluongcauhoi; i++) 
    						{
    							InCauHoiThi(TimCauHoi(ketqua[i]));
    						}

    						for (int i = 0; i < soluongcauhoi; i++) 
    						{
    							cin >> dapansv[i];
    							if (dapansv[i] == bangbam[ketqua[i]]->Dapan)
    							{
    								diemthi += diemthi1cau;
    							}
    						}
    						while (stop) {
    							if (std::cin.get() == '\n') 
    							{
    								stop = false;
    							}
    							clock.detach();
    						}

Câu chuyện là nếu h->Gio < 0 thì sao hả bạn?

2 Likes

Dạ không được do thực ra em chỉ để nhập phút, số giờ em để mặc định là 0 ạ.

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