大家猜一下~
如题,下面的短程序(设计到函数指针数组)结果是多少,编译一下看是否与你的想的一样,
我用断点编译过可不是很明白,还望明白人士指点以下哈:)
程序一:
#include <iostream>
using namespace std;
#define DF(N) void N(){cout<<"function "#N" called"<<endl;}
DF(a);DF(b);DF(c);DF(d);
void (*func_table[])()={a,b,c,d};
int main()
{
while(1){
cout<<"press a key from'a'to 'd' or q to quit"<<endl;
char c;
//char cr;
cin.get(c);
//cin.get(cr);
if(c=='q')
break;
if(c<'a'||c>'d')
continue;
(*func_table[c-'a'])();
}
return 0 ;
}
程序二:
#include <iostream>
using namespace std;
#define DF(N) void N(){cout<<"function "#N" called"<<endl;}
DF(a);DF(b);DF(c);DF(d);
void (*func_table[])()={a,b,c,d};
int main()
{
while(1){
cout<<"press a key from'a'to 'd' or q to quit"<<endl;
char c;
char cr;
cin.get(c);
cin.get(cr);
if(c=='q')
break;
if(c<'a'||c>'d')
continue;
(*func_table[c-'a'])();
}
return 0 ;
}
[解决办法]
你输入一个字符按Enter键时,
输入流中其实有两个字符:
一个输入字符和一个换行'\n'字符,
所以第一个程序每一次输入后,
都会出现两行"press a key from'a'to 'd' or q to quit".
若把cin.get(c);
改成cin>>c就跟第二个程序一样了.