Funkcja błędnie ładuje zawartość pliku do tablicy

Odpowiedz Nowy wątek
2011-12-09 19:33
0

Oto jest mój kod:

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

using namespace std;

void test(string (&strWords)[3][2])
{
    string strTmp = "";
    unsigned short line = 0;
    ifstream plik;
    plik.open("test.txt");
    while(getline(plik, strTmp))
    {
        if(!strTmp.empty())
        {
            short bPos = 0;
            for(size_t i = 0; i < strTmp.length(); i++)
            {
                if(strTmp[i] == ';')
                {
                    bPos++;
                    continue;
                }
                strWords[line][bPos] += strTmp[i];
                //cout << line << " " << bPos << " " << strTmp[i] << " " << strWords[line][bPos] << endl;
            }
            line++;
        }
    }
    plik.close();
}

int main()
{
    string asd[3][2];
    test(asd);
    cout << "*" << asd[0][0] << "*" << endl;
    cout << "*" << asd[0][1] << "*" << endl;
    cout << "*" << asd[0][2] << "*" << endl;
    cout << "*" << asd[1][0] << "*" << endl;
    cout << "*" << asd[1][1] << "*" << endl;
    cout << "*" << asd[1][2] << "*" << endl;
    system("Pause");
    return 0;
}

Funkcja test ma załadować wyrazy oddzielone średnikiem każdej linijki do tablicy.

Oto zawartość pliku test.txt:

abc;222;zzz
2abc2;888;hhh

I teraz pożądany efekt jaki ma być wyświetlony w konsoli jest taki:

*abc*
*222*
*zzz*
*2abc*
*888*
*hhh*

Natomiast otrzymuję taki:

*abc*
*222*
*zzz2abc*
*zzz2abc*
*888*
*hhh*

jak widać 3 i 4 linijka zawierają coś czego nie powinno tam być. Dlaczego? Głowię się już z tym z dobrą godzinę i po prostu nie widzę błędu w kodzie.

Pozostało 580 znaków

2011-12-09 20:21
0

Inną tablicę tworzysz, a inną wypisujesz ;-)
Zmień w kodzie na

        string asd[2][3];
void test(string (&strWords)[2][3])

i będzie poprawnie.

user image

Ewentualnie zmień sposób wypisywania i zostaw jak masz, ale chyba sensowniejszym układem będzie w każdej trzymać słowa w takim układzie jak teraz.

edytowany 1x, ostatnio: Jadeszek, 2011-12-09 20:22

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0