Thread: While Loop Issue

  1. #1
    Registered User
    Join Date
    Aug 2014
    Posts
    26

    Question While Loop Issue

    My program needs to:
    (A) Read 2 names from a file (For each name, there are 5 scores)
    (B) Omit the lowest/highest scores
    (C) Find the average of the 3 scores
    (D) Write the name and average score to a new file


    Note: The first line is simply the number of people.


    Here is what it needs to read:
    2
    Jennifer 10 9 8 9.5 10
    Michael 10 9 10 9 10


    Here is what it needs to write:
    Jennifer 9.50
    Michael 9.67


    My issues are:
    (A) The loop keeps outputting the last line (10) instead of continuing to the Michael line
    (B) Variables will not write to file



    Note: My main concern right now is the A, but if you could help me out with B, then I will pronounce you as a Jedi master!
    Note: I cannot use arrays, so please do not comment on how this program could be made more simple..


    Here is my code (Run it first to see what I mean by A):
    Code:
    //*****************************************************
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;                               
    //----------------------------------------------------
    // FUNCTION PROTOTYPE(S)
    void getJudgeData(double &, ifstream &);
    void calcScore(double,double,double,double,double,ifstream &,string);
    int findLowest(double,double,double,double,double);
    int findHighest(double,double,double,double,double);
    string contestantName(ifstream &);
    //----------------------------------------------------
    int main()
    {
        int i=0;
        int i2=0;
        double score,score1,score2,score3,score4,score5;
        int contestantCount;
        string name;
        ifstream iFile("starsearch.dat");
        if (iFile)
        {
            iFile>>contestantCount;
            // For each contestant
            while(i<contestantCount)
            {
                i2=0;
                // For each contestants line (Name-5th score)
                while(i2<6)
                {
                    if(i2==0)
                    {
                        name=contestantName(iFile);
                    }
                    getJudgeData(score,iFile);
                    if(i2==1)
                    {
                        score1=score;
                    }
                    if(i2==2)
                    {
                        score2=score;
                    }
                    if(i2==3)
                    {
                        score3=score;
                    }
                    if(i2==4)
                    {
                        score4=score;
                    }
                    if(i2==5)
                    {
                        score5=score;
                    }
                    i2++;
                }
                calcScore(score1,score2,score3,score4,score5,iFile,name);
                i++;
            }
        } 
        else
        {
            cout<<"Error: Error: File Could Not Be Opened.";
        }
        cout<<"\n";
        // Pause for Ms. Thomas
        system("Pause");
        return 0;
    }
    //----------------------------------------------------
    string contestantName(ifstream &fObject)
    {
        string name;
        fObject>>name;
        cout<<name<<"\n";
        return name;
    }
    //----------------------------------------------------
    void getJudgeData(double &score,ifstream &fObject)
    {
        fObject>>score;
        cout<<score<<"\n";
    }
    //----------------------------------------------------
    void calcScore(double score1,double score2,double score3,double score4,double score5,ifstream &,string name)
    {
        double average=0;
        int lowest, highest;
        ofstream oFile("results.dat");
        if (oFile)
        {
            lowest=findLowest(score1,score2,score3,score4,score5);
            highest=findHighest(score1,score2,score3,score4,score5);
            if(lowest==1)
            {
                if(highest==2)
                {
                    average=(score3+score4+score5)/3;
                }
                if(highest==3)
                {
                    average=(score2+score4+score5)/3;
                }
                if(highest==4)
                {
                    average=(score2+score3+score5)/3;
                }
                if(highest==5)
                {
                    average=(score2+score3+score4)/3;
                }
            }
            if(lowest==2)
            {
                if(highest==1)
                {
                    average=(score3+score4+score5)/3;
                }
                if(highest==3)
                {
                    average=(score1+score4+score5)/3;
                }
                if(highest==4)
                {
                    average=(score1+score3+score5)/3;
                }
                if(highest==5)
                {
                    average=(score1+score3+score4)/3;
                }
            }
            if(lowest==3)
            {
                if(highest==1)
                {
                    average=(score2+score4+score5)/3;
                }
                if(highest==2)
                {
                    average=(score1+score4+score5)/3;
                }
                if(highest==4)
                {
                    average=(score1+score2+score5)/3;
                }
                if(highest==5)
                {
                    average=(score1+score2+score4)/3;
                }
            }
            if(lowest==4)
            {
                if(highest==1)
                {
                    average=(score1+score2+score5)/3;
                }
                if(highest==2)
                {
                    average=(score1+score3+score5)/3;
                }
                if(highest==3)
                {
                    average=(score1+score2+score5)/3;
                }
                if(highest==5)
                {
                    average=(score1+score2+score3)/3;
                }
            }
            if(lowest==5)
            {
                if(highest==1)
                {
                    average=(score2+score3+score4)/3;
                }
                if(highest==2)
                {
                    average=(score1+score3+score4)/3;
                }
                if(highest==3)
                {
                    average=(score1+score2+score4)/3;
                }
                if(highest==4)
                {
                    average=(score1+score2+score3)/3;
                }
            }
            oFile<<name<<"="<<average<<"\n";
        }
        else
        {
            cout<<"Error: Error: File Could Not Be Opened.";
        }
        oFile.close();
    }
    //----------------------------------------------------
    int findLowest(double score1,double score2,double score3,double score4,double score5)
    {
        double lowest=score1;
        int indicator=1;
        if(score2<lowest)
        {
            lowest=score2;
            indicator=2;
        }
        if(score3<lowest)
        {
            lowest=score3;
            indicator=3;
        }
        if(score4<lowest)
        {
            lowest=score4;
            indicator=4;
        }
        if(score5<lowest)
        {
            lowest=score5;
            indicator=5;
        }
        return indicator;
    }
    //----------------------------------------------------
    int findHighest(double score1,double score2,double score3,double score4,double score5)
    {
        double highest=score1;
        int indicator=1;
        if(score2>highest)
        {
            highest=score2;
            indicator=2;
        }
        if(score3>highest)
        {
            highest=score3;
            indicator=3;
        }
        if(score4<highest)
        {
            highest=score4;
            indicator=4;
        }
        if(score5<highest)
        {
            highest=score5;
            indicator=5;
        }
        return indicator;
    }
    //*****************************************************

  2. #2
    Unregistered User Yarin's Avatar
    Join Date
    Jul 2007
    Posts
    2,158
    Now would be a good time for you to learn the rule of three.

  3. #3
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,661
    > getJudgeData(score,iFile);
    What is the value of i2, the first time you call this?
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

  4. #4
    Registered User
    Join Date
    Aug 2014
    Posts
    26
    Quote Originally Posted by Salem View Post
    > getJudgeData(score,iFile);
    What is the value of i2, the first time you call this?
    It is initialized as 0. But, I figured out that this is the problem to A. I copied that function call, removed it, then pasted it in each if statement in that loop. For example, on the line "if (i2==1)" following the curly brace I would put the function call before the line "score1=score". This outputted exactly what I wanted to see.

    For B, after I got the last issue to work, the file only read the last person with accompanying score to be outputted. I found that this was caused by each function call to "calcScore" being a fresh file write. I fixed this by simple doing the open/close in the main function (outside of the loop's scope) and passing it as an referenced variable to the function so it would stay open until I was done with it.

  5. #5
    Registered User
    Join Date
    Jul 2014
    Location
    Central Arizona
    Posts
    61
    I'm new to C++ but here are a few places you may have errors. Check out line 25 (are you trying to compare the two variables there). On line 27 you us a while loop to compare (i< contestantCount). What are the values if the variables you are trying to compare. Then you never increment the variable in that loop. There may be others too. You should try to code this in a lot fewer lines...Good Luck.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Loop Issue
    By M_A_T_T in forum C Programming
    Replies: 11
    Last Post: 02-19-2013, 07:29 PM
  2. For Loop Issue
    By Dynesclan in forum C Programming
    Replies: 5
    Last Post: 05-07-2012, 09:35 PM
  3. Loop issue
    By Gordon in forum Windows Programming
    Replies: 14
    Last Post: 01-07-2008, 02:04 AM
  4. While loop issue
    By exvor in forum C Programming
    Replies: 2
    Last Post: 09-17-2005, 11:13 AM

Tags for this Thread