Die Ausgabe in einem tabellarischen Format ist nicht aufgereiht

  • So sieht meine Ausgabe aus: Die Ausgabe in einem tabellarischen Format ist nicht aufgereiht

    Ich möchte die Ausgabe in einem schönen Tabellenformat haben Header und die Daten in der Mitte des für diese Variable zugewiesenen Bereichs. Ich bin mir nicht sicher, wie ich das machen soll.

    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
    
      cout << left;
      cout << setw (30) << "Student Name" << setw (5)<< "Average" << setw (12) << "Letter Grade" << "\n";     //headers for output  
    
      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
    
    
          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
    {
      char letter = 'Z';
    
      if (( average < 101) && (average > 89.9))
        {letter = 'A';
        }
      else if (( average < 90) && (average > 79.9))
          {letter = 'B';
          }
      else if (( average < 80) && (average > 69.9))
        {letter = 'C';
        }
      else if (( average < 70) && (average > 59.9))
          {letter = 'D';
          }
      else if ((average < 60) && (average > -1))
            {letter = 'F';
            }
      else if (average >100)
        {
          letter = 'A';
        }
      else 
        {cout << "Error, Program shutting down.";
          exit (0);
        }
    
      cout << left;
    
      cout << setw (30) << studentname << setw (5) << setprecision (2)<< fixed << average << setw (12) << letter << "\n";
    
      return;
    }
     
    22 November 2011
    Sam LaManna
2 answers
  • Ich finde die Informationen auf dieser Seite ( http://www.cprogramming.com) /tutorial/iomanip.html ) eine großartige Erinnerung an die Verwendung von setw().

    Ansonsten ist Mike_K richtig. Sie haben eine Breite von 5 Zeichen für die Spalte "Durchschnitt" (7 Zeichen) festgelegt.

    Um zu sehen, wie sich die Werte auf die Ausgabe auswirken, sollten Sie dies in Betracht ziehen etwas wie:

     // these three values are globals
    const unsigned int NAME_LEN(30);
    const unsigned int AVG_LEN(10);
    const unsigned int GRADE_LEN(12);
    ...
    ...
      cout << setw (NAME_LEN) << "Student Name" << setw (AVG_LEN)<< "Average"
           << setw (GRADE_LEN) << "Letter Grade" << "\n";     //headers for output  
     

    Wo Sie die globalen Werte für jede Ihrer cout -Anweisungen verwenden. Auf diese Weise könnten Sie den Wert einmal ändern, erneut kompilieren und erneut ausführen, wenn Sie wissen möchten, wie er aussehen würde, wenn Sie die durchschnittliche Spalte von 10 in 20 ändern. Ich finde es einfacher, den Wert an einem Ort zu ändern, anstatt an mehreren Orten.

    Zugegeben, andere argumentieren möglicherweise mit der Verwendung globaler Variablen.

    22 November 2011
    John Rochahawbsl
  • cout & lt; & lt; setw (30) & lt; & lt; "Student Name" & lt; & lt; setw (5) & lt; & lt; "Durchschnitt" & lt; & lt; setw (12) & lt; & lt; "Briefnote" & lt; & lt; "\ n"; // Header für die Ausgabe

    cout & lt; & lt; setw (30) & lt; & lt; Studentenname & lt; & lt; setw (5) & lt; & lt; Einstellgenauigkeit (2) & lt; & lt; fixiert & lt; & lt; durchschnittlich & lt; & lt; setw (12) & lt; & lt; Buchstabe & lt; & lt; "\ n";

    Ich weiß nicht viel über C ++, aber das scheint zu sein. Diese Setw-Funktion hat eine bestimmte Breite, und in Ihrer Kopfzeile haben Sie nur fünf Leerzeichen für den Wortmittelwert, was die Ausgabe bereits aufgrund der Anzahl der Buchstaben im Wort selbst durcheinander bringt. Ändern Sie in beiden oben genannten Fällen setw (5) in etwas wie setw (15) und sehen Sie, wie das aussieht.

    Viel Glück.

    22 November 2011
    Mike_K