Nie wczytuje się operatorem >> danych do tablic. Albo użyjesz klasy std::string albo zmienisz sposób wczytywania danych do pola W_nick. Możesz użyć metod get/getline.
struct WYNIKI
{
std::string W_nick[10];
int W_wygrana;
};
void odczytaj(WYNIKI gracz[], int &n)
{
ifstream lista_we;
n=0;
lista_we.open("lista.txt");
if(lista_we.is_open())
{
while(!lista_we.eof())
{
lista_we >> gracz[n].W_wygrana; -- >> wysypuje sie
lista_we >> gracz[n].W_nick; -- >> wysypuje sie
if(lista_we.fail()) break; //jesli byl blad to konczymy odczyt
n++;
if(n>100-1) break; // na MAX
}
lista_we.close();
}
}
Wyskakuje komunikat “Debug Assertion Failed”; Expression: string subscript out of rang -->> Nie kumam czemu poza zasiegiem
struct WYNIKI
{
char W_nick[10]; // -->> zostaje char
int W_wygrana;
};
void odczytaj(WYNIKI gracz[], int &n)
{
ifstream lista_we;
n=0;
lista_we.open("lista.txt");
if(lista_we.is_open())
{
while(!lista_we.eof())
{
lista_we.getline(cin, gracz[n].W_wygrana);// -->> blad
lista_we.getline(cin, gracz[n].W_nick);// -->> blad
if(lista_we.fail()) break; //jesli byl blad to konczymy odczyt
n++;
if(n>100-1) break; // na MAX
}
lista_we.close();
}
}
Wyskakuje
error C2664: ‘std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)’ : cannot convert parameter 1 from ‘std::istream’ to ‘char *’ – >> Tylko co zamieniam istream na char. Przypuszczam, ze coś mam nie tak za składnia getline();
Może to problem ze środowiskiem. Kompiluje w MS Visual Studio C++ 2008
Trzeba jeszcze myśleć. “std::string W_nick[10];” to nadal tablica, a do tablic się nie wczytuje operatorem>>. Jeśli chcesz mieć napis to wystarczy 1 obiekt std::string. Po drugie taka zmiana zazwyczaj pociągnie za sobą zmianę innych fragmentów kodu.
Jeśli natomiast zostajesz przy 10-znakowym buforze to trzeba podać ograniczenie do funkcji getline, inaczej będzie pisała dalej do pamięci do zaowocuje losowymi, ale zawsze zlymi wynikami. Zobacz tu: http://www.cppreference.com/wiki/io/getline
Czemu wysyłasz jako char* buffer obiekt std::cin, a jako liczbę bajtów do wczytania wysyłasz tablicę znaków? Bez sensu.
struct WYNIKI
{
std::string W_nick; --- >> Moje nie dopatrzenie przy kopiowaniu :D
int W_wygrana;
};
void odczytaj(WYNIKI gracz[], int &n)
{
ifstream lista_we;
n=0;
lista_we.open("lista.txt");
if(lista_we.is_open())
{
while(!lista_we.eof())
{
lista_we >> gracz[n].W_wygrana; -- >> nie przypisuje
lista_we >> gracz[n].W_nick; -- >> nie przypisuje
if(lista_we.fail()) break; //jesli byl blad to konczymy odczyt
n++;
if(n>100-1) break; // na MAX
}
lista_we.close();
}
}
Kompiluje się tylko nie przypisuje mi wartości. Chyba oleje temat by widzę, że porywam się z motyką na słońce. Trzeba przeczytać jakąś dobrą książkę na ten temat.
Być może posiada ktoś z was kod programu który zapisywał by do pliku dwie dane (jedną liczbę(int) i drugą nazwę(string czy cha[10])), przy następnym uruchomieniu programu odczytywał je dopisał 1 nową i zapisał znowu (max 100 rekordów). (chodzi o czas mam tydzień na oddanie pracy :? ).