30/09/2018, 20:10
Mọi người giúp mình thêm đoạn cho chương trình tự dừng và in ra màn hình như đề bài với
Đề:
Viết chương trình đo thời gian
Khi nhấn phím Enter thì bắt đầu tính giờ. Nhấn phím Enter lần thứ 2 thì dừng
tính giờ và hiển thị thời gian theo format: ##.## (số_giây.số_tick). Nếu thời gian
dài quá 10s thì hiện chữ “EE.EEE” (như là 1 báo lỗi khi thời gian quá lâu)
Code:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <time.h>
using namespace std;
class Clock {
public:
Clock();
~Clock();
void setClockStart();
void setClockStop();
void printresult();
private:
clock_t mStart, mStop;
};
Clock::~Clock()
{
}
Clock::Clock()
{
mStart = 0;
mStop = 0;
}
void Clock::setClockStart()
{
mStart = clock();
}
void Clock::setClockStop()
{
mStop = clock();
}
void Clock::printresult()
{
double duration;
duration = (mStop - mStart) / (double)CLOCKS_PER_SEC;
if (duration > 10)
cout << " EEEE";
else
cout << "
time is : " << fixed << setprecision(2) << duration << "
";
}
int main()
{
Clock test;
cout << "Enter any key to start" << endl;
_getch();
test.setClockStart();
cout << "Enter any key to stop" << endl;
_getch();
test.setClockStop();
test.printresult();
cout << endl << "Press any key to continue" << endl;
_getch();
}
Bài liên quan
Mình đã thử xóa if…else ở phần void Clock::printresult() và thêm vào while ở dưới hàm main, nhưng tất cả ý tưởng đều bị phá sản. Chương trình vẫn k tự ngừng chạy!
Cao nhân nào giúp mình với!
Ủa mình test thấy vẫn run bình thường mà nhỉ ???
Chắc mình chưa hiểu ý bạn là gì. Bạn nói rõ vấn đề hơn chút được không ?
@TheSky
Ý của đề là khi thời gian dài quá 10s thì sẽ tự hiện ra “EE.EEE” chứ k phải mình ấn Enter rồi hắn mới in ra màn hình là “EE.EEE” bạn à! Tại mình đọc nhầm đề nên mình viết thế thôi. Mà lưu ý là mình viết trên Visual Studio 2015 nhé!
Nếu vậy bạn thử cho kiểm tra thời gian lúc bắt đầu. Như bài của bạn bạn gọi xong 2 phương thức. Start và stop sau đó bạn mới gọi phương thức kiểm tra nên nó không tự động xuất ra Ee.
Dùng IDE khác thì bỏ dòng đầu đi là được mà.
Bạn có thể chữa lại code của mình giúp mình đc k bạn? Mình mới tập tành nên k biết phải chữa theo ý bạn như thế nào! :((((((((
Có cao nhân nào giúp mình với! Suy nghĩ mãi mà bí quá rồi! :(((
Không biết bạn làm được chưa. Nhưng mình cứ up code lên đây.
Bạn cứ sửa lại theo ý bạn nữa là oke rồi
Mình bổ sung thêm vào hàm
void Clock::setClockStart()
Mình đã chữa bài thành công theo cách của mình rồi! Nhưng mình cũng rất cám ơn ý tưởng và sự giúp đỡ của bạn! Chúc bạn có nhiều thành công trong cuộc sống!
mình không hiểu chỗ này làm sao để bắt sự kiện bấm phím để stop. nó luôn hiện ra EEE à? trong khoảng 10s này mình không thể bấm phim đc à?
Có chứ. Nếu số giây nó lớn hơn 10s thì nó sẽ in ra EE.EE.
Còn không thì nó in số giấy.
Mình cũng chưa hiểu ý tác giả cho lắm.
Chỉ fix lại sao cho khi chưa bấm phím nếu mà thời gian nó lớn hơn 10s thì sẽ in ra EE.EE.
cái này thì chắc là vậy.
nhưng mà làm thế nào để nó vừa tính giây, vừa bắt sự kiện nhập phím nhỉ? khi thời gian lớn hơn 10s thì không cho nhập nữa mà thông báo luôn.
_getch();
theo code thì mình thấy cái này dùng để bắt phím.Mình nghĩ là cho một biến
check
sau đó nếucheck = true tức là quá 10s
thì sẽ không gọi đến hàmsetClockStop();
nữa. còn nếucheck = false
thì vẫn dùng_getch()
để bắt phím và sau đó in ra giây.Không biết có ổn không
nghĩ là thế nhưng làm mới khó, làm sao nó vừa check vừa đồng thời sẵn sàng nhận phím.
Tạo biến check ra public
Cũng chưa nghĩ ra cách nào tối ưu hơn
không, ý t là vừa check vừa nhập cơ, chứ nếu dùng getch thì nó sẽ chờ mình nhập xong mới check, nếu check thì nó phải check xong mới nhập được.
Biến check được tạo cùng với hàm start.
Khi đó kiểm tra xong rồi. Nếu đúng thì không cho getch nữa. Còn không thì getch nó
thế tức là start phát thì đếm luôn đến 10 và báo ÈÈÈÈÈÈ…
Hẳn là như vậy rồi.