关于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系统会怎么办?
关于getche(),该如何处理
关于getche()char*func(){intchinti(0)staticchardata[100]chgetche()while(ch!27&&ch!13){data[i]
