我一直在搞乱我的非常基本的C ++知识(已经编程了两天),尝试编写一个计算围绕phi(1.61803399)的用户输入的程序。
这是代码,如果它是一团糟,道歉:
#include <iostream>
#include <math.h>
using namespace std;
//Prototypes:
float phiExpo;
float phiNegExpo;
float opt1f(float phi, float userInput){
return userInput * phi;}
float opt2f(float phi, float userInput){
return userInput / phi;}
float opt3f(){
return phiExpo;}
float opt4f(){
return phiNegExpo;}
float phiExpof(float phi, float userInput){
pow(phi,userInput);}
float phiNegExpof(float phi, float userInput){
pow(phi,-userInput);}
//Execute program:
int main(){
float userInput;
int userChoice;
float phi = 1.61803399;
float phiExpo;
float phiNegExpo;
cout<<"I want to (press corresponding number, then enter):"<<endl;
cout<<endl;
startchoices:
cout<<"1. Multiply by phi:"<<endl;
cout<<"2. Divide by phi:"<<endl;
cout<<"3. Exponentiate phi:"<<endl;
cout<<"4. Negatively exponentiate phi:"<<endl;
cout<<endl;
cin>>userChoice;
cout<<endl;
switch (userChoice){
case 1:
cout<<"Enter number for multiplication: ";
cin>>userInput;
return opt1f(phi, userInput);
case 2:
cout<<"Enter number for division: ";
cin>>userInput;
return opt2f(phi, userInput);
case 3:
cout<<"Enter number for to exponetiate phi by: ";
cin>>userInput;
return opt3f();
case 4:
cout<<"Enter number for negatively exponentiate phi by: ";
cin>>userInput;
return opt4f();
default:
cout<<"Please enter a number from 1 to 4.";
cout<<endl;
cout<<endl;
goto startchoices;
}
cin.get();
}
无论如何,在第一个提示符(1-4)输入数字时,程序只是崩溃到桌面,我无法找出原因。
非常感谢任何帮助。
答案 0 :(得分:3)
你确定崩溃了吗?代码只返回操作的值(转换为int,因为这是main
的返回类型)。我建议您使用cout << opt4f()
打印它。
答案 1 :(得分:2)
问题在于交换机中的return语句。
函数main()
的特殊之处在于返回值告诉操作系统程序是否成功。如果main()
的返回值为0,那么一切正常。如果它不为零,则表示存在错误。
在您的代码中,您将返回opt1f(phi, userInput)
,optef(phi, userInput)
等的值。这些值可能非零,从而告诉操作系统您的程序失败。
答案 2 :(得分:1)
在这种情况下,return
退出main()函数,导致程序终止。
答案 3 :(得分:1)
运行时,程序不会在switch语句中关闭;我得到你的第二个文字。 我看到了一些问题:
首先,正如人们注意到的更快,您的退货退出应用程序而不是输出答案。
其次,在将代码更改为cout而不是返回之后,您将需要进行“中断”;所以你不要在当前条件之后的每个条件下运行代码。
第三,您可能希望将goto更改为输入循环并向菜单添加退出选项。这更像是一种风格选择,但我认为你会发现c / c ++中的goto在将来更难调试。
-edit:格式化 - 好吧,假设您希望每个程序运行能够执行多个操作,并且要删除goto,您可以执行以下操作:
boolean quitting = false;
do {
cout << "1) Menu item 1" << endl << "2) Quit" << endl;
cin.get(userchoice);
switch(userchoice) {
case 1:
cout << "Please enter input for option 1: ";
cin >> userInput;
cout << case1function(userInput);
break;
case 2:
quitting = true;
break;
default:
cout << "Please read menu" << endl;
}
}while (!quitting);
答案 4 :(得分:0)
程序不会崩溃,它会退出,因为它应该是它应该做的。 return
语句表示执行将退出当前函数,如果当前函数为main
,它将退出程序。
返回值是程序返回OS的值。如果它不是0 - 操作系统会认为程序异常退出,但在你的情况下 - 它只是计算的值。