Сложное чтение из файла (Visual studio 2012)

0

Я застрял в чтении данных из файла. Так вот. У меня есть и т.д. 5 шахматных игр, но у меня есть некоторые цифры, потерянные (1-й файл), однако некоторые ppl приносят мне некоторые цифры (2-й файл), и мне нужно рассчитать, сколько полных шахматных таблиц у меня есть в конце, Короче. Это пример первого файла. Все, что мне нужно, это выяснить, как правильно его читать. В цикле чтения очевидно, что я буду получать только последнюю строку, но это был мой лучший снимок. Я не знаю, как получить все данные в памяти класса. Я новичок в этом, спасибо за любую помощь:

//5-number of incomplete chess games. P/Z/R/B/V/K-names of figures. 8/2/2/2/1/1-number of figures
//balta/juoda-white/black; if there is any other way to write this file in a different way and im too stupid to figure it out i would be thankful for the info

5 
1 P 8 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 8 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
2 P 6 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 6 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
3 P 4 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 4 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
4 P 2 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 2 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
5 P 0 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 0 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda



#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <istream>

using namespace std;

    const int Cn = 100;

const char CFd1[] = "Komplektai.txt";
const char CFd2[] = "Parama.txt";
const char CFr[] = "Turnyras.txt";

class Komplektas
{
private:
    int eil;
    char fig;
    int kiek;
    string spal;
public:
    void Deti(int e, char f, int k, string s);
    int ImtiEile()  { return eil; }
    char ImtiFigura() { return fig; }
    int ImtiKieki() { return kiek; }
    string ImtiSpalva() { return spal; }
};

void Komplektas::Deti(int e, char f, int k, string s)
{
    eil = e;
    fig = f;
    kiek = k;
    spal = s;
}

void Skaityti1(string fv, Komplektas A[], int & x1, int & j);

void Spausdinti1(string fv, Komplektas A[], int x1, int j);

int main()
{
    int x1;
    int j;
    Komplektas A[Cn];
    Skaityti(CFd1, A, x1, j1);
    Spausdinti(CFr, A, x1, j1);


    cout << "Programa baige darba" << endl;
    return 0;
}

void Skaityti(string fv, Komplektas A[], int & x, int & j)
{
    int eil, kiek;
    char fig;
    string spal;
    ifstream fd(fv.c_str());
    fd >> x;
    fd >> j;
    for (int t = 0; t < x; t++)
        fd >> eil;
        for (int i = 0; i < j; i++){
            fd >> fig >> kiek >> spal;
            A[i].Deti(eil, fig, kiek, spal);
            fd.ignore();
        }
        fd.close();
}
void Spausdinti(string fv, Komplektas A[], int x, int j)
{
    ofstream fr(fv.c_str());
    fr << x << endl;
    fr << j << endl;
    for (int t = 0; t < x; t++){
        for (int i = 0; i < j; i++){
            fr << A[i].ImtiEile() << " " << A[i].ImtiFigura() << " " << A[i].ImtiKieki() << " " << A[i].ImtiSpalva() << endl;
        }
    }
        fr.close();
}
Теги:
visual-c++
file-io

2 ответа

0

Спасибо за помощь и извините за язык в коде. Все еще изумлялся, что вы знаете, на каком языке. Я попытался сделать что-то с двухмерными массивами (матрицей), но я полностью зеленый в таких вещах. Вот моя попытка. Вот что я получаю:

1 P 0 balta 1 Z 0 balta 1 R 0 balta 1 B 0 balta 1 V 0 balta 1 K 0 balta 1 P 0 juoda 1 Z 0 juoda 1 R 0 juoda 1 B 0 juoda 1 V 0 juoda 1 K 0 juoda 1 2 0 juoda 
1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 
1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 
1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 
1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 1 2 0 juoda 

вместо:

5 13
1 P 8 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 8 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
2 P 6 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 6 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
3 P 4 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 4 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
4 P 2 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 2 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda
5 P 0 balta Z 2 balta R 2 balta B 2 balta V 1 balta K 1 balta P 0 juoda Z 2 juoda R 2 juoda B 2 juoda V 1 juoda K 1 juoda



class Komplektas
{
private:
    int eil;
    char fig;
    int kiek;
    string spal;
public:
    Komplektas(int e = 0, char f = 0, int k = 0, string s = "") :
        eil(e), fig(f), kiek(k), spal(s) { }
    ~Komplektas() { }
    void Deti(int e, char f, int k, string s) { eil = e; fig = f, spal = s; }
    int ImtiEile()  { return eil; }
    char ImtiFigura() { return fig; }
    int ImtiKieki() { return kiek; }
    string ImtiSpalva() { return spal; }
};


class Matrica
{
public:
    static const int CMaxEil = 100;
    static const int CMaxSt = 15;
private:
    Komplektas A[CMaxEil][CMaxSt];
    int n;
    int m;
public:
    Matrica(int nn = 0, int mm = 0) : n(nn), m(mm) { }
    ~Matrica()                                     { }
    int ImtiN() { return n; }
    int ImtiM() { return m; }
    void DetiN(int nn) {n = nn;}
    void DetiM(int mm) {m = mm;}
    void DetiReiksme(int i, int j, Komplektas r) { A[i][j] = r; }
    Komplektas ImtiReiksme (int i, int j) { return A[i][j]; }
};

void Skaityti1(string fv, Matrica & A);
void Spausdinti1(string fv, Matrica & A);

int main()
{
    Matrica figuros;
    Skaityti1(CFd1, figuros);
    Spausdinti1(CFr, figuros);

    cout << "Programa baige darba" << endl;
    return 0;
}

void Skaityti1(string fv, Matrica & A)
{
    int n, m, eil, kiek;
    char fig;
    string spal;
    Komplektas x;
    ifstream fd(fv);
    fd >> n >> m;
    A.DetiN(n);
    A.DetiM(m);
    for (int i = 0; i < n; i++){
        fd >> eil;
        for (int j = 0; j < m; j++){
            fd >> fig >> kiek >> spal;
            x.Deti(eil, fig, kiek, spal);
            A.DetiReiksme(i, j, x);
            cout << x.ImtiEile() << " " << x.ImtiFigura() << " " << x.ImtiKieki() << " " << x.ImtiSpalva() << endl;
        }
        }
        fd.close();
    }

void Spausdinti1(string fv, Matrica & A)
{
    Komplektas x;
    ofstream fr(fv);
    cout << A.ImtiN() << " " << A.ImtiM() << endl;
    for (int i = 0; i < A.ImtiN(); i++) {
        for (int j = 0; j < A.ImtiM(); j++) {
            x = A.ImtiReiksme(i, j);
            fr << x.ImtiEile() << " " << x.ImtiFigura() << " " <<
x.ImtiKieki() << " " << x.ImtiSpalva() << " ";
        }
    fr << endl;
    }
    fr.close();
}
0

Я смущен, поскольку я не говорю по-литовски, однако, насколько я вижу, ваш метод чтения (Skaityti) читает весь контент и хранит его в одномерном массиве. Вы зацикливаете все строки, и вы сохраняете все значения из eil. Однако после того, как вы прочитаете первую строку и перейдете ко второй строке, вы переписываете значения первой строки и так далее. Когда вы достигаете последней строки, вы читаете ее и перезаписываете предпоследний ряд. Я считаю, что решением будет иметь двумерный массив, первое измерение, представляющее строки, а второе измерение будет представлять значения данной строки. Таким образом, у вас будут значения для каждой строки.

Поэтому, если A - массив массивов Komplektas, например

Komplektas A[r][v], где r представляет количество строк, а v представляет количество значений, вы можете сохранить t я строка i го значения в A[t][i].

Ещё вопросы

Сообщество Overcoder
Наверх
Меню