我刚刚开始学习如何在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.
}
}
答案 0 :(得分:0)
我认为你是第一次为程序员做好工作! 输出中显示的换行符来自输入文件。
使用:
getline(in, name[x]);
你读完所有字符,包括最后的换行符。
之后您可以尝试修剪名称[x]。