64,681
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <windows.h>
using namespace std;
int vAdd(int &a, int &b) //函数按值返回
{
int temp;
temp = a+b;
return temp;
};
int* pAdd(int &a, int &b) //函数值用指针返回
{
int temp;
temp = a+b;
return &temp; //返回局部指针为什么正常??
};
const int* cpAdd(int &a, int &b) //函数返回值用const指针返回
{
int temp;
temp = a+b;
return &temp;
};
int& rAdd(int &a, int &b) //函数返回值用引用返回
{
int temp;
temp = a+b;
return temp; //返回局部引用为什么也正常??
};
int main()
{
int A,B,Flag =0; //A、B接收输入的两个整数,Flag判断用户的选择
int Sum =0;
bool quit = false;
while (!quit) {
//用do-while循环处理用户的选择,如果没有正确的输入理论上应该一直出现选择界面
do {
cout<<"======Choose a method to add two integer number:======"<<endl;
cout<<"1.return by value;\n"
<<"2.return by pointer;\n"
<<"3.return by reference;\n"
<<"4.return by const pointer.\n";
cin>>Flag;
//如果缺少下面两句,错误输入将会导致死循环
cin.clear();
cin.ignore();
} while(!(Flag ==1 || Flag ==2|| Flag ==3|| Flag ==4)); //end do-while
cout<<"Please input two integer number which you want to add:"<<endl;
cin>>A>>B;
//Lable 1
if (Flag ==1)
Sum = vAdd(A,B);
else if (Flag ==2){
int *pSum = pAdd(A,B);
Sum = *pSum;
}
else if (Flag == 3)
Sum = rAdd(A,B);
else if (Flag ==4){
const int* csum = cpAdd(A,B);
Sum = *csum;
} //end if
cout<<"the sum of "<<A<<" and "<<B<<" is:"<<Sum<<endl;
cout<<"Press Q for quit,else other key for continue...\n";
char cquit;
cin>>cquit;
//同上。如果缺少下面两句,错误输入将会导致死循环
cin.clear();
cin.ignore();
if (cquit == 'Q' || cquit == 'q') {
quit = true;
//直接退出控制台,即便是在VC里面启动程序
HWND hWnd = ::FindWindow("ConsoleWindowClass",NULL);
SendMessage(hWnd,WM_CLOSE,0,0);
} //end if
} //end while
return 0;
}
/*
//用下面的switch语句代替Label 1处的if语句会报指针初始化错误!
switch(Flag) {
case 1:
Sum = vAdd(A,B);
break;
case 2:
int *pSum = pAdd(A,B);
Sum = *pSum;
break;
case 3:
Sum = rAdd(A,B);
break;
case 4:
const int* csum = cpAdd(A,B);
break;
default:
cout<<"Wrong choice!"<<endl;
}
*/
int V()
{
int tmp(8);
return tmp;
}
int* P()
{
int tmp(8);
return &tmp;
}
int& R()
{
int tmp(8);
return tmp;
}
int main()
{
int a=V();
int* b=P();
int& c=R();
int d=R();
cout<<a<<' '<<*b<<' '<<c<<' '<<d<<'\n';
cout<<V()<<' '<<*P()<<' '<<R()<<'\n';
/////////////////////////////////////
return 0;
}
Dev-C++结果:
8 2090068098 2090068098 8
8 2090068098 2090068098
请按任意键继续. . .
VS2008结果:
8 8 8 8
8 8 8
请按任意键继续. . .
///////////.....
cin.clear();
cin.ignore();
//这个两句清空原来的缓存,防止输入了非int数出错而陷入循环.
//也可以把Flag申明为char,相应的检测写为
//....
while(!(Flag =='1' || Flag =='2'|| Flag =='3'|| Flag =='4'));
//...