初学程序员;程序立即在开关上关闭(C ++)

时间:2011-03-28 17:56:33

标签: c++ crash switch-statement

我一直在搞乱我的非常基本的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)输入数字时,程序只是崩溃到桌面,我无法找出原因。

非常感谢任何帮助。

5 个答案:

答案 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 - 操作系统会认为程序异常退出,但在你的情况下 - 它只是计算的值。