C++ 为什么跳过数据文件的第一行c++;
在为我的学校作业运行这个循环时,它似乎跳过了我从中提取的数据文件的第一行 这是数据文件C++ 为什么跳过数据文件的第一行c++;,c++,arrays,while-loop,data-files,C++,Arrays,While Loop,Data Files,在为我的学校作业运行这个循环时,它似乎跳过了我从中提取的数据文件的第一行 这是数据文件 乔·约翰逊89 苏西·考德威尔67 马特贝克100 亚历克斯·安德森87 佩里·迪克森55 我得到的结果是: 考德威尔,苏西D 贝克,马特A 安德森,亚历克斯B 迪克森,佩里F 班级平均77.25 这是代码 #include <iostream> #include <string> #include <fstream> #include <
乔·约翰逊89 苏西·考德威尔67 马特贝克100 亚历克斯·安德森87 佩里·迪克森55 我得到的结果是: 考德威尔,苏西D 贝克,马特A 安德森,亚历克斯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
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
//变量声明:
字符串fName[10];
字符串lName[10];
浮动等级平均值;
字符串文件;
字符串名;
智力分数[10];
浮点数和=0;
煤焦品位;
int i=0;
伊夫丁;
//职能机构:
cout文件;
打开(file.c_str());
如果(!din)
{
cout>分数[i];
总和=总和+分数[i];
开关(静态施法(分数[i]/10))
{
案例0:
案例1:
案例2:
案例3:
案例4:
案例5:
等级=‘F’;
打破
案例6:
等级='D';
打破
案例7:
等级=‘C’;
打破
案例8:
等级=‘B’;
打破
案例9:
等级=‘A’;
打破
案例10:
等级=‘A’;
打破
违约:
cout第一行没有被跳过,但您从未打印出任何结果:
din >> fName[i];
din >> lName[i];
din >> scores[i];
while (!din.eof())
{
i++;
请注意,在上述代码的前三行中,您读入了fName[0]
、lName[0]
和scores[0]
的值,但随后您增加了i(在while循环中),不再查看这些值
您最好删除这三行,并将i++;
行移到while循环的末尾。您在循环之前读取一次,然后再次读取循环中的第一件事,覆盖以前读取的任何值。这会产生丢弃第一行的效果-读取它,然后立即读取秒上面有一条线。