30/09/2018, 20:41

Không tìm được lỗi trong chương trình Đồng hồ điện tử?

Xin chào. Mình có làm 1 chương trình Đồng hồ điện tử. Và khi run thì nó sẽ bắt đầu chạy cho tới đủ 24 giờ thì sẽ stop.
Nhưng 1 lỗi ngớ ngẩn là khi chạy được 59 phút 59 giây thì qua được 1 giờ đúng không, nhưng chương trình vẫn không lên được 1 giờ
VD: 00:59:59 thì nó sẽ lại thành 00:00:00 trong khi mình muốn là 01:00:00
Không biết nó lỗi như thế nào? Các bạn Pro hướng dẫn giùm mình nhé: Mình cảm ơn
Code:

#include <stdio.h>// *Important: Variable " const "
#include <limits.h>
#include <float.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
#include <Windows.h>
#include <time.h>
int main()
{
    for (int gio = 0; gio <= 24; gio++)
    {
        if (gio <= 9)
            printf("0%d:",gio);
        else if (gio >= 10)
            printf("%d:",gio);
        for (int phut = 0; phut <= 59; phut++)
        {
            if (phut <= 9)
                printf("0%d:",phut);
            else if (phut >= 10)
                printf("%d:",phut);
            for (int giay = 0; giay <= 59; giay++)
            {
                if (giay <= 9)
                    printf("0%d",giay);
                else if (giay >= 10)
                    printf("%d",giay);
                Sleep(1);
                system("cls");
                if (phut <= 9)
                    printf("00:0%d:",phut);
                else if (phut >= 10)
                    printf("00:%d:",phut);
            }
            system("cls");
        }
    }
    getch();
    return 0;
}

P/S: Do lập trình ra đồng hồ và kiểm tra xem nó hoạt động tốt chưa rất mất thời gian và đặc biệt là chương trình trên cần 1 tiếng đồng hồ để kiểm tra xong nên mình để Sleep(1) để set time là 1/1000 giây để cho nó chạy nhanh

Nguyễn Văn Nam viết 22:45 ngày 30/09/2018

Sai ở đoạn

                system("cls");
                if (phut <= 9)
                    printf("00:0%d:",phut);
                else if (phut >= 10)
                    printf("00:%d:",phut);

Cách đơn giản nhất để sửa là

system("cls");
                if (gio <= 9)
                    printf("0%d:",gio);
                else if (gio >= 10)
                    printf("%d:",gio);
                if (phut <= 9)
                    printf("0%d:",phut);
                else if (phut >= 10)
                    printf("%d:",phut);
Người bí ẩn viết 22:46 ngày 30/09/2018

Wow, hay đó man. Cảm ơn bạn nhiều nhé!
Mà bạn có thể giải thích cái lỗi cũng như đoạn code bạn fix không?

Nguyễn Văn Nam viết 22:42 ngày 30/09/2018

Cái đó đơn giản mà :3
Theo code của bạn thì cứ mỗi lần tăng một giây thì bạn sẽ xóa những thứ đã in lên màn hình để thay cái mới
> system(“cls”);

                    if (phut <= 9)
                        printf("00:0%d:",phut);
                    else if (phut >= 10)
                        printf("00:%d:",phut);

Cái sai của bạn là ở đoạn printf("00:0%d:",phut);printf("00:%d:",phut); như thế thì vô tình bạn đã để mặc định giờ bằng 0 vì bạn chỉ in phút ra.

Ở đoạn code của mình sửa thì mình cũng chỉ copy lại từ đoạn code phía trên của bạn xuống thôi. Thực chất là để mỗi khi bạn gọi hàm system("cls"); mình sẽ in lại đầy đủ giờ, phút, giây ra thôi :3

P/s: sorry mình k giỏi giải thích lắm :3

Người bí ẩn viết 22:51 ngày 30/09/2018

Giải thích thế mình hiểu rồi Thanks nhiều nhé!

viết 22:52 ngày 30/09/2018

viết là printf("%02d:%02d:%02d", h, m, s); luôn, khỏi mất công if else < 10 hay >= 10.

%d là in số nguyên
%2d là in số nguyên tại vị trí có 2 chỗ trống. Nếu số nguyên chỉ có 1 ký tự thì số đó nằm ở bên phải
%-2d tương tự %2d, nhưng số ưu tiên nằm về bên trái.
%02d tương tự %2d, nhưng thay vì chỗ trống ko in ra ký tự nào thì bây giờ in số 0 vào.

Người bí ẩn viết 22:50 ngày 30/09/2018

Cảm ơn luôn nhé …

Bài liên quan
0