C ++从文件中读取

时间:2016-03-14 11:45:48

标签: c++

您好我是c ​​++的初学者,现在只需要参加一些考试测试,但现在我遇到一个问题,它缺乏对c ++的了解,所以我有一个u2.txt的文件,他的内容是

 3 5
Petras Rasa // name of dancer 
3 1 5 8 10 // scores for a technique 
5 6 7 8 9 // scores for art 
Rita Jurgis
6 5 8 5 8
9 8 7 6 5
Rasa Linas
10 10 10 10 10
8 8 8 8 8

所以任务说前两个数字显示舞者和判断数字,第二行显示舞者名字下面的线条显示分数 技术和下面的一行显示了艺术性的分数,因此它的3位舞者得分低于。

所以现在我需要写一个函数女巫读取该文件并将分数和名称存储到变量中,我正在使用类和数组系统,所以我将它们存储在那里,事情是我真的不知道如何阅读这样的文件,因为到现在为止我正在学习像Name这样的文件,54左右,所以我使用了一个getline并用','结束了行,但是没有逗号野兔所以我面临一个问题,这是我的功能直到现在:

const string U2 = "U2.txt";
const string U2rez = "rez.txt";

class Results
{
public:
    string name;
    int scorestech;
    int scoresart;
};


int main()
{
    Results v[5]
    return 0;
}

void Freading(const string fn,Results v[])
{
    int alldancers;
    int alljudge;
    ifstream fin(fn.c_str());
    fin >> alldancers >> alljudge;
    for(int a =0; a < 3; a++){


    }

}

所以现在我需要阅读这个文件,并计算每个舞者的艺术和技术分数

3 个答案:

答案 0 :(得分:2)

Rezultatai v[5]除了缺少分号外,还定义了一个旧式的固定长度数组。这是不正确的,文件中的第二个数字告诉你有多少评委。

相反,请使用std::vector<Type>。这可以改变其长度。

而且我猜测(因为你没有使用英语),对于这个例子,你实际上应该有3 Rezultatai,每个舞者一个。每个都应该有2x5分。

答案 1 :(得分:0)

在提出这样的问题之前,你应该对此进行更多的搜索,无论如何都要尝试下面给出的方法。

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

void main ()
{
    string line_one_by_one;
    ifstream inputfile;
    inputfile.open ("names.txt");
        while(!inputfile.eof) // To get you all the lines.
        {
            getline(infile, line_one_by_one); // Saves the line in line_one_by_one
        }
    inputfile.close();
    system ("pause");
}

您需要做的是识别每一行并存储您需要的东西。进一步在c ++中读取字符串到int的转换。

阅读:

http://www.cplusplus.com/reference/istream/istream/read/

http://www.cplusplus.com/reference/string/string/?kw=string

答案 2 :(得分:0)

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

const string U2 = "U2.txt";
const string U2rez = "rez.txt";

class Results
{
public:
    string name;
    int scorestech;
    int scoresart;
};

void Freading(const string fn,Results v[]);

int main()
{
    Results v[5];
    Freading(U2,v);
    return 0;
}

void Freading(const string fn,Results v[])
{
    int alldancers;
    int alljudges;
    int biggest = 0;
    int smallest = 99;
    ifstream fin(fn.c_str());
    fin >> alldancers >> alljudges;
    fin.ignore();
    for(int a =0; a < alldancers; a++){
        int biggest = 0;
        int smallest = 99;
        int totaltech = 0;
        int totalart = 0;

        getline(fin, v[a].name);

        for(int b = 0; b < alljudges; b++)
        {
            int scores;
            fin >> scores;
            totaltech += scores;
        }
        for(int b =0; b < alljudges; b++)
        {
            int scores;
            fin >> scores;
            totalart += scores;
        }
        v[a].scorestech = totaltech;
        v[a].scoresart = totalart;
        cout << v[a].name << endl;
        cout << v[a].scorestech <<endl;
        cout << v[a].scoresart <<endl;

    }
    fin.close();
}

这是我到目前为止所做的,但我得到的结果是:

Petras Rasa
27
35

0
45

0
45

ware我做错了或我做错了什么,因为不知何故当循环第二次它没有捕获第二个舞者的名字