01/10/2018, 12:12

Cảnh báo: `warning C4715: 'xet' : not all control paths return a value` thì mình sai ở đâu vậy

// viet chuong trinh nhap vao thang in ra thang do co bao nhieu ngay//
#include<stdio.h>
void nhap( int &t);
int xet(int t);
void xuat(int n);
void main()
{
	int t,n;
	nhap(t);
	n= xet(t);
	xuat(n);
}
void nhap( int &t)
{
	scanf("%d",&t);
}
int xet(int t)
{
	int nam;
	switch (t)
		{
	case 1:case 3:case 5:case 7:case 8:case 10:case 12: return 0;
	case 4:case 6:case 9:case 11: return 1;
	case 2:
		{ 
		printf("nhap nam hien tai:" );
		scanf("%d.
",&nam);
		if(t%4==0)
			return 2;
		else 
			return 3;
		}
		}
}// nó cảnh báo ngay đây//
void xuat(int n)
{
	if (n==0)printf(" co 31 ngay");
	if(n==1) printf(" co 30 ngay");
	if(n==2) printf("co 29 ngay");
	if(n==3) printf("co 28 ngay");

}

warning C4715: ‘xet’ : not all control paths return a value

rogp10 viết 14:25 ngày 01/10/2018

warning C4715: ‘xet’ : not all control paths return a value

Có thể hiểu là: có khả năng hàm sẽ không trả về giá trị nào cả bạn xem lại cú pháp switch rồi nghĩ xem vì sao.

明玉 viết 14:25 ngày 01/10/2018

IDE cảnh báo rằng có thể tồn tại 1 code flow không hề có return (mà hàm xet của bạn lại đc define là có return value). Cái này bên C# thì đc tính là error luôn đấy.

Hà Hải Long viết 14:18 ngày 01/10/2018

nhưng trong hàm xet của minh code nào cũng có return hết mà nhỉ. Bạn thấy mình sai ở đâu không

明玉 viết 14:20 ngày 01/10/2018

Hàm “xet” của bạn có rất nhiều case, nhưng bạn có xét hết khả năng của biến “t” ko? Cho dù bạn chắc chắn “t” chỉ có các case đó thôi, nhưng compiler nó ko biết đâu, nó bao quát hết, cảnh báo nhỡ sau này bạn đưa “t” lạ vào thì code flow ko có return, gây undefined behavior. Bạn có thể thêm từ khóa default để xét các case khác của “t”. Hoặc ít ra bạn cứ để sẵn 1 lệnh return ở cuối hàm số.

Hà Hải Long viết 14:23 ngày 01/10/2018

t lạ ví dụ như tháng 13 14 ,… p ko. nếu như mình để 1 lệnh return cuối hàm thì return cái j

明玉 viết 14:14 ngày 01/10/2018

Sao mình biết đc, return -1 (ý là input ko hợp lệ) chẳng hạn, tùy vào bạn, tùy vào yêu cầu hệ thống, tùy vào yêu cầu của khách hàng

rogp10 viết 14:16 ngày 01/10/2018

Hoặc ít ra bạn cứ để sẵn 1 lệnh return ở cuối hàm số

default thì sút cái exception phát chứ giấu lỗi thì nguy hiểm về lâu dài.

sycoi001 viết 14:20 ngày 01/10/2018

Default: return -1; cái là nó hết la,

Bài liên quan
0