Начинающий программист;программа мгновенно закрывается на коммутаторе (C ++) - PullRequest
0 голосов
/ 28 марта 2011

Я возился со своими очень базовыми знаниями 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 ]

3 голосов
/ 28 марта 2011

Вы уверены, что он падает?Код просто возвращает значение операции (приведенное к типу int, так как это тип возврата main).Я бы посоветовал вам распечатать его, используя cout << opt4f().

2 голосов
/ 28 марта 2011

Проблема возникает с операторами возврата в вашем коммутаторе.

Функция main() отличается тем, что возвращаемое значение сообщает операционной системе, была ли программа успешной.Если возвращаемое значение main() равно 0, то все работало нормально.Если он ненулевой, то произошла ошибка.

В вашем коде вы возвращаете значение opt1f(phi, userInput), optef(phi, userInput) и т. Д. Эти значения, вероятно, отличны от нуля, что говорит операционной системе.что ваша программа не удалась.

1 голос
/ 28 марта 2011

Ваша программа не закрывается в операторе switch при запуске; Я получил ваш второй текст. Хотя я вижу несколько проблем:

Во-первых, как заметили более быстрые люди, вы возвращаетесь из приложения вместо вывода ответа.

Во-вторых, после того, как вы измените свой код на cout, а не на return, вы захотите поставить «break»; так что вы не запускаете код в каждом условии после текущего.

В-третьих, вы можете изменить goto на цикл ввода и добавить опцию выхода в меню. Это скорее стилистический выбор, но я думаю, вы обнаружите, что goto на c / c ++ сложнее отлаживать в будущем.

-редакт: для форматирования- Что ж, если вы хотите, чтобы за один запуск программы можно было выполнять более одной операции, и чтобы избавиться от 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);
1 голос
/ 28 марта 2011

В этом случае return s выходит из функции main (), что приводит к чистому завершению программы.

0 голосов
/ 28 марта 2011

Программа не падает, она завершается, потому что это то, что она должна делать. Оператор return означает, что выполнение выйдет из текущей функции, а в случае текущей функции main - из программы.

Значение возврата - это значение, которое программа вернет в ОС. Если это не 0 - ОС будет думать, что программа вышла ненормально, но в вашем случае - это просто значение вычисления.

...