C ++:进入循环后的额外新行?

时间:2017-03-22 07:27:49

标签: c++

我刚刚开始学习如何在1月份进行编码,而且还非常新!我的代码可能/肯定看起来像垃圾,肯定有一种方法可以让它更有效率,但我还没有学到它!

我似乎无法找出为什么显示屏上有新的一行!

输出看起来像这样:

Student name    Test1    Test2    Test3    Test4    Average    Grade
Ben Smith
90              88       77       55       76.55    A

如果你想尝试,这里是文本文件内容的形成。

90 88 77 55 Ben Smith  
66 77 66 55 Stuart Bit

这是我的完整代码(输出语句即将结束):

#include<iostream>
#include<iomanip>
#include<fstream>
#include<string>
using namespace std;

int main()
{
   string name[25], grade[25];
   string dummy;
   int lineNum=0;
   int x,y;

   int table[25][4]{};
   double average[25]{},classAvg[4]{};

   ifstream in;
   in.open("classData.txt");

   while(getline(in, dummy))
   { 
      lineNum++;
   }

   in.close();
   in.open("classData.txt");

   while(!in.eof())
   {
      for(x=0; x<lineNum;x++)
      {
          for(y=0;y<4;y++)
          {
            in>> table[x][y];
          }
          in.ignore(1, '\n');
          getline(in, name[x]);
      }
   }

   in.close();

   for(x=0; x<lineNum;x++)
   {
      for(y=0;y<4;y++)
      {
          average[x] += table[x][y];
      }
      average[x]= average[x]/4;
   }

   for(int x=0;x<4;x++)
   {
      for(int y=0;y<lineNum;y++)
      {
         classAvg[x]+=table[y][x];
      }
      classAvg[x]=classAvg[x]/lineNum;
   }

   for(int x=0;x<lineNum;x++)
   {
      if(average[x]>= 90)
         grade[x]="A";
      else if(average[x]>= 80)
         grade[x]="B";
      else if(average[x]>= 70)
         grade[x]="C";
      else if(average[x]>= 60)
         grade[x]="D";
      else 
         grade[x]="F";
   }

    cout<<setw(20)<<"Student Name"
    <<setw(20)<<"Test 01"<<setw(20)<<"Test 02"
    <<setw(20)<<"Test 03"<<setw(20)<<"Test 04"
    <<setw(20)<<"Average"
    <<setw(20)<<"Grade"<<endl; //Print headers.

   for(int x=0;x<lineNum;x++)
   {
      cout<<setw(20)<<name[x]; //Print all students' names.
      for(int y=0;y<4;y++)
      { 
         cout<<setw(20)<<table[x][y]; //Print 4 tests per student.
      }
      cout<<setw(20)<<setprecision(2)<<fixed<<average[x]; //Print average of 4 tests.
      cout<<setw(20)<<grade[x]<<endl; //Print the grade of the student.
   }
}

1 个答案:

答案 0 :(得分:0)

我认为你是第一次为程序员做好工作! 输出中显示的换行符来自输入文件。

使用:

getline(in, name[x]);

你读完所有字符,包括最后的换行符。

之后您可以尝试修剪名称[x]。