为什么数据文件的第一行被跳过C ++

时间:2018-11-11 02:48:27

标签: c++ arrays while-loop data-files

在为我的学校作业运行此循环时,似乎正在跳过我从中提取的数据文件的第一行。

这是数据文件
乔·约翰逊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

1 个答案:

答案 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循环的末尾。