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;
}
Anh Khoa Nguyen viết 03:09 ngày 01/10/2018

Ở đâ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.

void main() {
	int ngay, thang, nam;
	cout << "Nhap ngay thang nam: ";
	cin >> ngay >> thang >> nam;
	if (ngay == 1) {
		switch (thang)
		{
		case 2: 
		case 4:
		case 6:
		case 8:
		case 9:
		case 11:
			ngay = 31;
			thang--;
			break;
		
		case 3:
			if (nam % 4 == 0 && nam % 100 != 0) {
				ngay = 29;
				thang--;
			}
			else {
				ngay = 28;
				thang--;
			}
			break;

		case 5:
		case 7:
		case 10:
		case 12:
				ngay = 30;
				thang--;
				break;
		case 1:
			ngay = 31;
			thang = 12;
			nam--;
			break;
		}
	}
	else {
		ngay--;
	}
	cout << ngay << "/" << thang << "/" << nam << endl;
	system("pause");
}

code này mình làm lâu rồi hơi chuối tí.

Trần Hoàn viết 03:21 ngày 01/10/2018

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.

Bài liên quan
0