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
Bài liên quan
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.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.
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
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ố.
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
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
default thì sút cái exception phát chứ giấu lỗi thì nguy hiểm về lâu dài.
Default: return -1; cái là nó hết la,