首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大家猜一下~该怎么处理

2012-02-14 
大家猜一下~如题,下面的短程序(设计到函数指针数组)结果是多少,编译一下看是否与你的想的一样,我用断点编

大家猜一下~
如题,下面的短程序(设计到函数指针数组)结果是多少,编译一下看是否与你的想的一样,
我用断点编译过可不是很明白,还望明白人士指点以下哈:)

程序一:
#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就跟第二个程序一样了.

热点排行