在为我的学校作业运行此循环时,似乎正在跳过我从中提取的数据文件的第一行。
这是数据文件
乔·约翰逊89
苏西·考德威尔67
马特·贝克100
亚历克斯·安德森87
佩里·迪克森55
我得到的输出是:
苏德D考德威尔 贝克,马特A 安德森(Alex B) 迪克森·佩里F 全班平均水平77.25
这是代码。
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
int main()
{
// Variable declarations:
string fName[10];
string lName[10];
float grade_Average;
string file;
string name;
int scores[10];
float sum = 0;
char grade;
int i = 0;
ifstream din;
// Function body:
cout << "Enter the name of the file. " << endl;
cin >> file;
din.open(file.c_str());
if (!din)
{
cout << " Cannot open the input file. Please try again." << endl;
return 0;
}
cout << setw(10) << setfill(' ') << "Name" <<setw(20)<<setfill(' ')<< "Grade" << endl;
din >> fName[i];
din >> lName[i];
din >> scores[i];
while (!din.eof())
{
i++;
din >> fName[i];
din >> lName[i];
din >> scores[i];
sum = sum + scores[i];
switch (static_cast<int> (scores[i]/10))
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
grade = 'F';
break;
case 6:
grade = 'D';
break;
case 7:
grade = 'C';
break;
case 8:
grade = 'B';
break;
case 9:
grade = 'A';
break;
case 10:
grade = 'A';
break;
default:
cout << "Invalid score." << endl;
}
name = lName[i] + ',' + fName[i];
cout << setw(10) << setfill(' ') << name << setw(20) << setfill(' ')<<(" ") << grade << endl;
}
grade_Average = sum / i;
cout << "Class average " << grade_Average << endl;
din.close();
return 0;
}
// end function main
答案 0 :(得分:2)
第一行不会被跳过,但是您永远不会打印出任何结果:
din >> fName[i];
din >> lName[i];
din >> scores[i];
while (!din.eof())
{
i++;
请注意,在上述代码的前三行中,您读取了fName[0]
,lName[0]
和scores[0]
的值,但随后又将i递增了(在while循环内) ,再也不用看那些值了。
最好删除这三行,然后将i++;
行移到while循环的末尾。