关于getche(),该如何处理

关于getche()char*func(){intchinti(0)staticchardata[100]chgetche()while(ch!27&&ch!13){data[i]

关于getche()
char*   func()
{       int   ch;
        int   i(0);
        static   char   data[100];
        ch=getche();
while(ch!=27   &&   ch!=13)
{      
data[i]=ch;
i++;
ch=getche();
}
if   (ch==13)  
{data[i+1]= '\0 ';
  if   (strcmp(data, "exit "))   return   NULL;
  else   if   (strcmp(data, "back "))   return   NULL;
  else   return   data;
}
if   (ch==27)   return   NULL;
}

        void   main()  
{  
                      cout < <*func() < <endl;
                    }

编译时:warning   C4715:   'func '   :   not   all   control   paths   return   a   value

运行时比方键入abc,则程序说:遇到问题需要关闭,请问是什么问题啊?

[解决办法]
调试一下,一步一步得到答案,f9设置断点,f5执行到断点,f10单步运行且不进入函数体,f11单步进入函数
[解决办法]
#include <conio.h>
char* func(char data[],int n)//不能返回局部变量地址,所以要在外面定义data
{
char c;
int i=0;
while(i <n)
{
if((c=getch())==27)
{
cout < < "你按了ESC键退出 " < <endl;
exit(0);
}
else if(c==13)
{
printf( "%c ", '\n ');
if(i !=4)
{
cout < < "你输入的是: " < <data < <endl;
return data;
}
data[i++]=c;
}//还可以加上backspace键的处理.
else
{
printf( "%c ",c);
data[i++]=c;
}
if(i==5)
{
if(strncmp(data, "back\015 ",5)==0)
{
cout < < "你输入了back,我返回了 " < <endl;
return 0;
}
else if(strncmp(data, "exit\015 ",5)==0)
{
cout < < "你输入了exit,我ByeBye了 " < <endl;
exit(0);
}
}
}

cout < < "你输入的是: " < <data < <endl;
return data;
}
void main()
{
char data[100]={0};
func(data,100);
}

[解决办法]
(1)if (ch==27) return NULL; // else没有返回值,所以编译警告
(2)你在func函数中可能返回NULL值,而在main中总是*func,显然当返回NULL时就会出问题
[解决办法]
1 ,func,最尾一行,加上return NULL;
2,如果函数真的返回NULL值了,你想*NULL系统会怎么办?