Die Datei wird sich bis zum Ende der Datei nicht wiederholen

  • Alles in meinem Code funktioniert, es werden Eingaben aus der Datei abgerufen, der Durchschnitt berechnet und ausgegeben. Es macht einfach nicht alles auf einmal. Wenn ich die Eingabetaste drücke, wird die nächste Zeile usw. bis zum Ende der Datei ausgeführt. Wie mache ich es so, dass alle Zeilen gleichzeitig sind?

    Code:

     /***************************************************/
    /* Author:     Sam LaManna                         */
    /* Course:     CSC 135 Lisa Frye                   */
    /* Assignment: Program 4 Grade Average             */
    /* Due Date:   10/10/11                            */
    /* Filename:   program4.cpp                        */
    /* Purpose:    Write a program that will process   */
    /*             students are their grades. It will  */
    /*             also read in 10 test scores and     */
    /*             compute their average               */
    /***************************************************/
    
    #include <iostream>     //Basic input/output
    #include <iomanip>      //Manipulators
    #include <string>       //String stuff 
    #include <fstream>
    
    using namespace std;
    
    void instruct ();       //Function declaration for printing instructionstring studname ();
    void input (ifstream &infile, float& test1, float& test2, float& test3, float& test4, float& test5, float& test6, float& test7, float& test8, float& test9, float& test10, string& studentname);      //Function declaration for input
    float aver (float test1, float test2, float test3, float test4, float test5, float test6, float test7, float test8, float test9, float test10);      //Function declaration for calculating average
    void output (string studentname, float average);      //Function declaration for output
    
    
    
    int main()
    {
      float test1 = 0;              //Vars (test1 - test10) for test scores
      float test2 = 0;
      float test3 = 0;
      float test4 = 0;
      float test5 = 0;
      float test6 = 0;
      float test7 = 0;
      float test8 = 0;
      float test9 = 0;
      float test10 = 0;
      string studentname = "a";     //Define Var for storing students name
      float average = 0;            //Define var for storing average
    
    
      instruct();     //Function call to print instructions
    
    
      ifstream infile("grades.dat");
    
      input (infile, test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, studentname);     //Function call for scores
    
      while (!infile.eof())
        {
          average = aver (test1, test2, test3, test4, test5, test6, test7, test8, test9, test10);    //Function call for average
    
          output (studentname, average);     //Function call for output
    
          cin.ignore(1);
    
          input (infile, test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, studentname); //Get new input
        }     //end eof
    
      return 0;
    }
    
    /***************************************************/
    /* Name: instruct                                  */
    /* Description: Print instructions to user.        */
    /* Paramerters: N/A                                */
    /* Return Value: N/A                               */
    /***************************************************/
    
    void instruct()
    {
      cout << "\n" << "This program will calculate the average of 10 test scores that are read from a file. " << "\n" << "\n";
      //Prints instructions
    
      return;
    }
    
    /***************************************************/
    /* Name: input                                     */
    /* Description: Get input                          */
    /* Paramerters: N/A                                */
    /* Return Value: N/A                               */
    /***************************************************/
    
    void input (ifstream& infile, float& test1, float& test2, float& test3, float& test4, float& test5, float& test6, float& test7, float& test8, float& test9, float& test10, string& studentname)
    
    {
      getline(infile, studentname);
      infile >> test1 >> test2 >> test3 >> test4 >> test5 >> test6 >> test7 >> test8 >> test9 >> test10;
      infile.ignore(10, '\n');
    
      return;
    }
    
    
    
    /***************************************************/
    /* Name: aver                                      */
    /* Description: Calculate Average                  */
    /* Paramerters: N/A                                */
    /* Return Value: aver                              */
    /***************************************************/
    
    
    float aver (float test1, float test2, float test3, float test4, float test5, float test6, float test7, float test8, float test9, float test10)
    
    {
      float aver = 0;
      aver = test1 + test2 + test3 + test4 + test5 + test6 + test7 + test8 + test9 + test10;
      aver = aver / 10;
      return aver;
    }
    
    
    /***************************************************/
    /* Name: output                                    */
    /* Description: Calculate Average                  */
    /* Paramerters: N/A                                */
    /* Return Value: aver                              */
    /***************************************************/
    
    void output (string studentname, float average)      //Function declaration for output
    { 
    
      cout << studentname;
    
      cout << average;
    
      return;
    }
     
    22 November 2011
    Sam LaManna
2 answers
  • Entfernen Sie

     cin.ignore(1);
     

    aus der while-Schleife in main, es blockiert die Programmausführung bis Sie ein Zeichen eingegeben haben.

    Oh, und bevor Sie eine neue Frage öffnen, warum alles in einer Zeile gedruckt wird, liegt dies daran, dass die Eingabe, die Sie in cin eingegeben haben, zum Vorschieben der Zeile verwendet wurde jetzt sollten Sie jedoch eine endl zu Ihrer Ausgabe hinzufügen

     cout << blah << bleh << endl;
     
    22 November 2011
    r_ahlskog
  • In Ihrer main -Funktion verwenden Sie

     cin.ignore(1);
     

    , was extrahiert / wartet für ein Eingabezeichen aus cin und verwirft es. Weitere Informationen hierzu finden Sie in dieser Referenz zu istream :: ignore .

    Wenn Sie diese Anweisung entfernen oder auskommentieren, wird Ihr Problem behoben.

    22 November 2011
    schnaader