01/10/2018, 01:08
Tìm lỗi bài toán?
Đề : Nhập vào ngày tháng năm, kiểm tra xem hôm trước là ngày nào? Vd: 5/3/1996 thì hôm trước là ngày 4/3/1996.
Bài này nhập mấy ngày bình thường thì kết quả đúng. Nhưng nhập ngày 1/2/1996 thì nó in ra ngày 29/1/1996 còn nhập 1/3/1996 thi in ra 31/2/1996. Ai sửa giúp em vs.
#include <stdio.h>
int main(int argc, char *argv[])
{
int ngay,thang,nam;
int nhuan;
int sntt;
printf("Nhap vao ngay thang nam: ");
scanf("%d%d%d",&ngay,&thang,&nam);
if(nam%400==0 || (nam%4==0 && nam%100!=0))
nhuan=1;
else
nhuan=0;
switch(thang)
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: sntt=31;break;
case 4: case 6: case 9: case 11: sntt=30;break;
case 2:{
if(nhuan=1)
sntt=29;
else
sntt=28;
}
}
if(ngay>0 && ngay<=sntt && thang>0 && thang<13 && nam>0)
{
ngay=ngay-1;
thang=thang;
nam=nam;
if(ngay<=0)
{
ngay=sntt;
thang=thang-1;
}
if(thang<=0)
{
thang=12;
nam=nam-1;
}
printf("Hom qua la ngay: %02d:%02d:%02d%",ngay,thang,nam);
}
else
printf("Nhap ngay thang nam khong hop le
");
return 0;
}
Bài liên quan
Ở đây bạn sau cái if thì ngay = sntt thì sai r bạn à. Nếu nhập là tháng 3 thì sntt = 31, nên khi sau khi if thì ngay = số ngày của tháng đó lun. Bạn phải làm sao cho nó biết được số ngày tháng sau.
code này mình làm lâu rồi hơi chuối tí.
Bạn thay vì sử dụng số ngày tối đa từ lúc nhập vào thì tạo thêm một biến mới và tính số ngày tối đa sau khi giảm tháng và dùng cái đó làm giá trị ngày là được.