2011-10-19 1 views
0

나는 프로그램을 실행하고 프리미엄을 선택하면 프로그램을 실행 한 다음 정기적 인 서비스를위한 기능도 실행합니다. 문제는 줄에서 int main에 있습니다. 내가 뭘 잘못 했니? IT 부서는 문제를 분명히 설명하지 못했다고 말합니다. 이유는 여기에서 왜 그렇게 많은 텍스트가 있는지 알아야합니다.스위치와 기능

/************************************************/ 
/* Author:  Sam LaManna      */ 
/* Course:  CSC 135 Lisa Frye    */ 
/* Assignment: Program 3 Cell Phone Bill  */ 
/* Due Date: 10/20/2011      */ 
/* Filename: program3.cpp      */ 
/* Purpose: This program calculates and  */ 
/*    prints the bill for a cellular */ 
/*    telephone company    */ 
/************************************************/ 



//TODO: 
//Fix account number issue: large numbers cause intfinte loop. Maybe use string? 
//Complete premium and regular service calculation functions 
//Output function - Figure out how to print 



#include <iostream> //Basic input/output 
#include <iomanip>  //Manipulators 

using namespace std; 

void instruct();  //Function declaration for printing instructions 
int accnum();   //Function declaration for account number 
char servcode();  //Function declaration for service code 
float regserv();  //Function declaration for regular service 
float premserv (int& daymin, int& nightmin);  //Function declaration for premium service 
void output (float premiumserv, float regularserv);  //Function declaration for printing results 

int main() 
{ 
    int accountnum = 0;  //Var for account number 
    char servicecode = 'a';  //Var for service code 
    float premiumserv = 0;  //Var for premium service total 
    float regularserv = 0;  //Var for regular service total 
    int daymin = 0; 
    int nightmin = 0; 

    instruct();  //Function call to print instructions 

    accountnum = accnum();  //Function call to input account number 

    servicecode = servcode(); //Function call to get service code 

    switch(servicecode)  //Switch to determine which calc to use 
    { 
    case 'r': 
     break; 
    case 'R': 
    regserv(); 
     break; 
    case 'p': 
     break; 
    case 'P': 
    premserv (daymin, nightmin); 
     break; 
    } 

    premiumserv = premserv (daymin, nightmin);  //Function call for regular service 

    regularserv = regserv();  //Function call for premium service 

    cout <<"total" << premiumserv <<"day" << daymin << "night " << nightmin; 

    return 0; 
} 



/************************************************/ 
/* Name: instruct        */ 
/* Description: Prints instructions to user  */ 
/* Parameters: N/A        */ 
/* Return Value: N/A       */ 
/************************************************/ 

void instruct() 
{ 
    cout << "\n" << "This program will calculate the cellular telephone bill for a given customer when " << "\n" 
     << "given the correct inputs. "; 
    //Prints instructions to user 

    return; 
} 

/************************************************/ 
/* Name: accnum         */ 
/* Description: Get user account number   */ 
/* Parameters: N/A        */ 
/* Return Value: accnum       */ 
/************************************************/ 

int accnum() 
{ 
    int accnum = 0;        //Define var for account number 
    char accyn = 'n';        //Define char for user verify 
    int i = 1;         //Define var for sentinel loop 


    do { 
    cout << "\n" << "\n" << "Please enter your account number: "; 
    cin >> accnum; 
    while ((accnum < 0) && (i<3)) 
     { 
    cout << "\n" << "Error - invalid number, please try again."; 
    cout << "\n" << "Please enter your account number: "; 
    cin >> accnum; 
    i++; 
    if (i == 3) 
     { 
     cout << "\n" << "Too many invalid attempts, program terminating." << "\n" 
     << "Have a nice day. " << "\n" << "\n"; 
     exit (0); 
     }  //end if 
     }  //end while 
    cout << "\n"; 
    cout << "Your account number is: " << accnum << "\n" 
    << "Is this correct? [y/n] "; 
    cin >> accyn; 
    } while (accyn != 'y');  //end do/while loop 


    return accnum; 
} 

/************************************************/ 
/* Name: servcode        */ 
/* Description: Get service type    */ 
/* Parameters: N/A        */ 
/* Return Value: servcode      */ 
/************************************************/ 

char servcode() 
{ 
    char servcode = 'a';        //Define var for service code 
    char serviceyn = 'n';       //Define var for user verify 
    int i = 1;          //Define var for sentinel loop 

    do { 
    cout << "\n" << "Please enter your service code, [R]egular or [P]remium:" << "\n"; 
    cin >> servcode; 
    while ((servcode != 'R' && servcode != 'P' && servcode != 'r' && servcode != 'p') && (i < 3)) 
     { 
    cout << "\n" << "Error - invalid service code, please try again. "; 
    cout << "\n" << "Please enter your service code: "; 
    cin >> servcode; 
    i++; 
    if (i == 3) 
     { 
     cout << "\n" << "Too many invalid attempts, program terminating." << "\n" 
     << "Have a nice day. " << "\n" << "\n"; 
     exit (0); 
     }  //end if 
     }  //end while 
    cout << "\n" << "You entered: " << servcode << "\n" 
    << "Is that correct? [y,n]"; 
    cin >> serviceyn; 
     } while (serviceyn != 'y'); // end do/while loop 

    return servcode; 
} 

/************************************************/ 
/* Name: regserv        */ 
/* Description: Calculations for regular serv */ 
/* Parameters: N/A        */ 
/* Return Value: regserv      */ 
/************************************************/ 

float regserv() 
{ 
    int regmin = 0;  //Var for number of minutes used 
    float regserv = 0; //Var for cost for regular service 


    cout << "\n" "Please enter the minutes used: " << "\n"; 
    cin >> regmin; 
    regserv = (regmin - 50) * 0.2 + 10; 

    return regserv; 

} 

/************************************************/ 
/* Name: premserv        */ 
/* Description: Calculations for premium serv */ 
/* Parameters: N/A        */ 
/* Return Value: premserv      */ 
/************************************************/ 

float premserv (int& daymin, int& nightmin) 
{ 
    float daytotal = 0;  //Var for day total 
    float nighttotal = 0; //Var for night total 
    float premserv = 0;  //Var for premium service cost 

    cout << "\n" << "Please enter the number of minutes used durring the day (6AM - 6PM): " << "\n"; 
    cin >> daymin; 
    cout << "\n" << "Please enter the number of minutes used durring the night (6PM - 6AM): " << "\n"; 
    cin >> nightmin; 

    daytotal = (daymin - 75) * 0.1; 
    nighttotal = (nightmin - 100) * 0.05; 
    premserv = 25 + daytotal + nighttotal; 

    return premserv; 

} 
+5

IT가 맞았습니다 ... – Nate

+0

어떻게 그렇게 문제를 나열하고 문제가 있다고 생각했습니다. 나는 전체 코드도 포함시켰다. 또 뭐야? –

+0

부수적으로, 나는 프리미엄 서비스를 실행하기 위해 'P'와 'p'를 원하고 일반 서비스를 실행하려면 'R'과 'r'을 원한다고 가정합니다. 이게 니가 원하는거야? 현재 'r'또는 'p'를 입력하면 작동하지 않으므로 '중단'에 도달하고 즉시 종료됩니다. 당신이 원하는 것은 다음과 같이 그 휴식을 제거하는 것입니다 : case 'r': case 'R': regserv(); 대소 문자 구분 'p': 대소 문자 구분 'P': premserv (daymin, nightmin); –

답변

1

아래

premiumserv = premserv(daymin, nightmin); 
regularserv = regserv(); 

전체 코드 당신은 switch 문 내부 regserv() 또는 premserv() 부르지 만, 당신은 무조건 전환 후 즉시 모두를 호출합니다.

스위치에 대한 의견은 사용자가 스위치의 의미를 잘못 이해했다는 것을 나타냅니다. 그것은 다음에 일어날 일을 "선택"하지 않습니다. 실제로 스위치 내부에서 코드를 실행하기 때문에 전환 후 호출 할 필요가 없습니다. 그러나 premiumservregularserv 변수를 할당하고 switch 문 내부 출력을 수행하는 것을 잊지 마세요 예 :

... 
case 'R': 
    regularserv = regserv(); 
    cout << ... regularserv ... 
    break; 
... 
+0

어떻게 함수의 출력을 저장합니까? switch 문 밖에서 할 것처럼 switch 문 뒤에 –

+0

함수의 출력을 변수에 지정하려고합니다. – ObscureRobot

+0

switch 명령문에서 fuctions의 출력을 지정하지 않았습니다. 그게 내가 스위치 아래 코드 2 라인을 가지고 그게 전부 –

0

같습니다 문제는 코드 섹션에있을 수 있습니다 같은 :

switch(servicecode)  //Switch to determine which calc to use 
    { 
    case 'r': 
     break; 
    case 'R': 
    regserv(); 
     break; 
    case 'p': 
     break; 
    case 'P': 
    premserv (daymin, nightmin); 
     break; 
    } 

    premiumserv = premserv (daymin, nightmin);  //Function call for regular service 

    regularserv = regserv();  //Function call for premium service 

    cout <<"total" << premiumserv <<"day" << daymin << "night " << nightmin; 

여기서 서비스 코드를 바꾸고 regserv와 premserv를 호출합니다. 그런 다음 나중에이 함수를 호출하지만 regserv의 경우 반환 값을 다시 참조되지 않는 변수에 할당합니다.

0

글쎄, 당신의 프로그램이해야 할 일이 100 % 확실하지는 않지만, 사용자가 'R'또는 'r'을 입력 할 때 regserve 함수를 호출하고 사용자가 'P'또는 'p'를 입력하십시오. 그러나 switch 문에서 'p'또는 'r'을 수신하면 즉시 break를 호출합니다. 어떤 휴식을 취할지는 'P'또는 'R'경우에 빠지는 대신 switch 문이 끝난 후에도 계속 실행됩니다.

수정하는 가장 좋은 방법은 regserve에 대한 명시 적 호출을 추가하거나 각 사례에 대해 사전 미리 작성하는 것입니다 (중단을 포함하지 않아도 될 수는 있지만 명시 적으로 액션을 명시하여 읽을 수 있습니다). 각 경우에 대해).