2016-04-11 6 views
0
int main() 

{ 
    double tuitionCalc(int sumCreditHoursTaken); 

    int numCourses; 
    double total = 0.0; 
    double tuitionCost= 0.0; 


    cout << "\t\t This Program calculates a student's total number of\n"; 
    cout << "\t\tcredit hours and tution for a given semester.\n"; 

    cout << "\nPlease enter the number of Courses you will be taking this semester: "; 
    cin >> numCourses; 

    for (int count = 1; count <= numCourses; count++) 
    { 
     double sumCreditHoursTaken; 
     cout << " please enter the number of credit hours for course" << count << ": "; 
     cin >> sumCreditHoursTaken; 
     total += sumCreditHoursTaken; 
    } 

    cout << fixed << showpoint << setprecision(2); 
    cout << "Your Total number of credit hours is: " << total << endl; 
    cout << "Your total tuition will be: $" << tuitionCalc(tuitionCost) << "\n\n"; 

    return 0; 
} 

und die Funktion im Berufunguninitialized ?, tuitionCost, lokale Variable,

double tuitionCalc(int sumCreditHoursTaken) 
{ 
    double tuitionCost = 0.0; 
    double costCreditHour = 147.00; 
    double maxHoursFullTuition = 12; 
    double maintFeeAddOn = 29.33;` 

    if (sumCreditHoursTaken <= maxHoursFullTuition) 
     cout<< " " << (sumCreditHoursTaken * costCreditHour); 
    else if (sumCreditHoursTaken > maxHoursFullTuition) 
     cout << " " << (maxHoursFullTuition * costCreditHour) + ((sumCreditHoursTaken - maxHoursFullTuition) * maintFeeAddOn); 

    return tuitionCost; 
} 

Eingang für die Anzahl der Kurse ist 5 und Kredit Stunden ist 3,3,3.5,4,2.5 i Erhalten Sie die gesamten Kreditstunden, aber scheinen die Studiengebühren angezeigt zu werden? danke s

+0

Sie haben die Funktion "tuitionCalc" für einen Parameter (tutorCost = 0) aufgerufen, der Null ist. – laish129

+0

@ user26456166 sehen Sie die Antwort Ich habe – laish129

+1

codiert danke ich verstehe die Lösung! – Delo

Antwort

2

Du eigentlich nie einen Wert tuitionCost in tuitionCalc() Methode zuweisen, so wird es immer 0.0 sein.

Um zu erarbeiten: Sie geben tuitionCost von tuitionCalc() zurück. Sie initialisieren zuerst tuitionCost = 0.0, aber fahren Sie niemals damit fort, einen berechneten Wert zuzuweisen. Wenn Sie also tuitionCost zurückgeben, wird der Wert zurückgegeben, den Sie initialisiert haben: 0.0.

+0

Könntest du mehr dazu sagen? – Delo

+0

Dort ist nicht viel auszuarbeiten. 'tuitionCost' erscheint zweimal in der' tuitionCalc'-Funktion. Zuerst, wenn es auf 0.0 gesetzt ist und das zweite Mal, wenn es zurückgegeben wird. 'tuitionCost' ist nie auf etwas anderes eingestellt, daher gibt die Funktion immer 0.0 zurück. – user4581301

+0

ausgearbeitet ein bisschen, im Grunde, was user4581301 sagte – Chara

0

Ich habe Ihren Code nicht im Detail untersucht, aber wenn Sie Eingaben Gleitkommazahlen enthalten, ändern Sie den Typ für sumCreditHoursTaken von int zu double.

Außerdem ändern die Parameter für den Aufruf von tuitionCalc von tuitionCost zu Gesamt.

0

Es scheint, dass OP in Konflikt mit Missverständnis Umfang und wie Variablen an Funktionen übergeben werden.

In main definiert OP tuitionCost. tuitionCalc definiert eine weitere tuitionCost. Diese sind unterschiedlich tuitionCost s. Sie repräsentieren verschiedene Speicherorte und können unterschiedliche Werte speichern.

Als nächstes, da die tuitionCalc Funktion

definiert
double tuitionCalc(int sumCreditHoursTaken) 

tuitionCalc(tuitionCost)tuitionCost wandelt es in einer ganzen Zahl nehmen, und übergeben Sie eine Kopie in tuitionCalc wo es mit dem sumCreditHoursTaken Namen verwendet werden. Man könnte sagen, dass OP an dieser Stelle drei tuitionCalc s hat. Nicht was sie wollen.

Zertrümmern tuitionCalc Prototyp, sehen wir, dass es sumCreditHoursTaken, eine ganze Zahl und basierend auf dem Namen die Anzahl der Kreditstunden genommen, nicht eine Gesamtkosten. tuitionCalc gibt auch einen double zurück und leitet den Zweck der Funktion daraus ab; der Name würde erwarten, dass er den Unterricht berechnet und zurückgibt.

Wie Anatoly heißt es in seiner Antwort, sollte die Eingabe zu tuitionCalc an Sicherheit grenzender Wahrscheinlichkeit total, die Gesamtzahl der Kredit Stunden berechnet wird, und der Ausgang tuitionCost sein sollte.

Da dies den Geruch einer Hausaufgabe hat, liegt es nicht im Interesse des OP, die Frage vollständig zu beantworten. Stattdessen hier ein paar Empfehlungen:

Erledigen Sie tuitionCost von main. Es dient nur dazu, die Verwirrung zu erhöhen. Sie können Variablennamen wiederverwenden, aber nur dort, wo ein klarer Vorteil besteht.Wenn Sie eine cost und eine Funktion haben, die cost übernimmt und verwendet, dann ist die Verwendung von cost für beide sinnvoll. Denken Sie daran, dass die Kosten innerhalb der Funktion eine andere Entität sind, wenn Sie nicht als Referenz übergeben werden. In

void function(int & cost) 

mit

function(cost); 

genannt beide cost s gleich sind. Aber in

void function(int cost) 

genannt mit

function(cost); 

beide function seine Kosten eine Kopie des cost des Anrufers und alle durch die Funktion vorgenommenen Änderungen nur die Kopie bewirken.

Deklarieren Sie Variablen in der Nähe des Ortes, an dem Sie sie verwenden. Auf diese Weise müssen Leute, die Ihren Code lesen, nicht auf und ab scrollen und sonst auf die Jagd gehen. Es hilft Ihnen auch, weil es Fehler wie macht, "Warum ein Anruf eine Funktion ist, die ein int mit einem double nimmt?" noch offensichtlicher.

Nicht cout in tuitionCalc. Berechnen und zurückgeben tuitionCost. Erlaube main zur Ausgabe tuitionCost. Eine Funktion mit einem Namen wie calc sollte nur rechnen. Namen sollten die Funktion so genau wie möglich beschreiben.

+0

Ich lerne C++ online, ich bin kein Student, nur online lernen, ich muss nicht in keine Aufgabe, es ist keine Klasse, aber danke für Ihre Rückmeldung, meine Ziel war es, an den Punkt zu kommen, an dem ich vermasselt habe – Delo

0

Zuerst sollten Sie den Funktionsprototyp erstellen, bevor Sie ihn deklarieren. Und es gab einige Verwirrungen in den Code, den Sie verwendet haben, habe ich mein Bestes versucht, Fehler auszulassen, hoffe, dass dies hilfreich ist!

#include <iostream> 
#include <iomanip> 
using namespace std; 
double tuitionCal(double sumCreditHoursTaken); 

int main() { 

    double tuitionCalc(int sumCreditHoursTaken); 

    int numCourses; 
    double total = 0.0; 
    //double tuitionCost= 0.0; 


    cout << "\t\t This Program calculates a student's total number of\n"; 
    cout << "\t\tcredit hours and tution for a given semester.\n"; 

    cout << "\nPlease enter the number of Courses you will be taking this semester: "; 
    cin >> numCourses; 

    double sumCreditHoursTaken; // you should create this variable outside the for loop 

    for (int count = 1; count <= numCourses; count++) 
    { 
     cout << " please enter the number of credit hours for course" << count << ": "; 
     cin >> sumCreditHoursTaken; 
     total += sumCreditHoursTaken; 
    } 

    double tuitionCost=tuitionCal(total); 
    cout << fixed << showpoint << setprecision(2); 
    cout << "Your Total number of credit hours is: " << total << endl; 
    cout << "Your total tuition will be: $" <<tuitionCost<< "\n\n";// I assume this is what you want 



    return 0; 
} 

double tuitionCal(double sumCreditHoursTaken)//the parameter type is double now 
{ 
    double tuitionCost = 0.0; 
    double costCreditHour = 147.00; 
    double maxHoursFullTuition = 12; 
    double maintFeeAddOn = 29.33; 

    if (sumCreditHoursTaken <= maxHoursFullTuition) 
     tuitionCost=(sumCreditHoursTaken * costCreditHour); 
    else if (sumCreditHoursTaken > maxHoursFullTuition) 
     tuitionCost=(maxHoursFullTuition * costCreditHour) + ((sumCreditHoursTaken - maxHoursFullTuition) * maintFeeAddOn); 

    return tuitionCost; 
    //I don't see a point of returning the value and couting both you can 
    //do only one of the oprations 
} 
+1

Schauen Sie sich die erste Zeile in 'main' für den Funktionsprototyp an. Ein seltsamer Ort, um es zu sagen, aber immer noch legal. Persönlich möchte ich, wenn möglich, Prototypen abschaffen, indem ich die Definition vor der Verwendung platziere. Eine weniger mögliche Fehlerquelle. – user4581301

+0

Empfehlungen: Verwandle 'costCreditHour' und Freunde in Konstanten. 'sumCreditHoursTaken' sollte ein' int' bleiben und 'costCreditHour' sollte ein' int' sein. "Doppel" -Vergleiche können aufgrund von Gleitkomma-Ungenauigkeiten merkwürdig werden. 'else if' kann einfach 'else' sein. Wenn der Test für '<=' fehlschlägt, bleibt nur '>' übrig. – user4581301