Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z zmiennymi w petli

Ostatnio zmodyfikowano 2011-12-15 17:01
Autor Wiadomość
Marys
Temat założony przez niniejszego użytkownika
Problem z zmiennymi w petli
» 2011-12-13 18:11:48
Witam,
miałem długą przerwę w c++ i nie wiem co teraz robię źle, ale np. w kodzie poniżej zmienna wiersz nie zmienia się po obiegu pętli, w ogóle w tym miejscu jakby się nic nie działo, ale wartość max mi znajduje :/

C/C++
char * pc_Dane;
int DlugoscPliku;
int tactics[ 4 ];
unsigned int wiersz = 0;
int liczbaTaktyk = 0;
int taktyki[ 4 ];
char abc[ 5 ];
int z = 0;

fstream plik_odczytu;
plik_odczytu.open( "test.txt", ios::in | ios::binary );
plik_odczytu.seekg( 0, ios::end );
DlugoscPliku = plik_odczytu.tellg();
pc_Dane = new char[ DlugoscPliku + 1 ];
plik_odczytu.seekg( 0, ios::beg );
plik_odczytu.read( pc_Dane, DlugoscPliku );
plik_odczytu.close();

pc_Dane[ DlugoscPliku ] = 0;

char max = pc_Dane[ 0 ];

for( int i = 0; i <= DlugoscPliku; i++ ) {
    if(( int ) pc_Dane[ i ] != 10 &&( int ) pc_Dane[ i ] != 13 ) {
        //cout << pc_Dane[i] << endl;
        abc[ z ] = pc_Dane[ i ];
        z++;
        if( max < pc_Dane[ i ] ) {
            cout << "\n\n\nPROWNUJE\n\n";
            liczbaTaktyk++;
            max = pc_Dane[ i ];
            wiersz = i;
            taktyki[ liczbaTaktyk ] = pc_Dane[ i ];
           
        }
    }
}

cout << "MAX: " << max << endl;
cout << "Wiersz: " << wiersz << endl;
cout << "Liczba taktyk: " << liczbaTaktyk << endl;
int taktyka = 0;
int y = 0;
int j = 0;

if( liczbaTaktyk > 1 ) {
    //losuj taktykę
    int indexTaktyki = rand() % 5;
   
    cout << "LOSUJE" << endl;
   
    for( int i = 0; i <= DlugoscPliku; i++ ) {
        if(( int ) pc_Dane[ i ] != 10 &&( int ) pc_Dane[ i ] != 13 ) {
            //cout << pc_Dane[i] << endl;
            if( pc_Dane[ i ] == taktyki[ indexTaktyki ] && pc_Dane[ i ] == abc[ y ] ) {
                wiersz = i;
                taktyka = y;
            }
            y++;
        }
    }
} else {
    int u = 0;
    for( j; j <= sizeof( abc ); j++ ) {
        if( max == abc[ j ] ) {
            taktyka = j;
        }
    }
}
P-45589
GoldWolf
» 2011-12-15 12:43:24
a co zawiera plik test.txt - mnie MAX zawsze pokazuje jakiś znak, ale nie wiem co autor miał na myśli, a tak po za tym mam błąd po zakończeniu programu:
"Run-Time Check Failure #2 - Stack around the variable 'abc' was corrupted."
więc coś z tablica jest.
P-45643
madmike44
» 2011-12-15 14:03:56
A mnie z kolei ten kod działa w tym sensie, że w pętli for zmienia się wartość zmiennej "wiersz". Nie wiem natomiast, jak wygląda plik tekstowy i co chciałeś osiągnąć (nie analizowałem kodu) - ja utworzyłem sobie plik test.txt z kilkoma liczbami wewnątrz, rozdzielonymi spacjami.

Jeszcze jedno - w ostatniej pętli for w kodzie masz taki zapis:

C/C++
for( j; j <= sizeof( abc )

1. Nie wiem, co chciałeś zrobić z tym "j" na początku.
2. Porównujesz tutaj zmienne ze znakiem i bez znaku - w zależności od tego, co robisz z tymi zmiennymi, może to powodować trudne do znalezienia błędy.
P-45646
Marys
Temat założony przez niniejszego użytkownika
» 2011-12-15 17:01:48
W pliku test.txt są zapisane wartości oddzielone enterami, czyli każda wartość w nowym wierszu.

A co to ma robić?
W pliku są 4 wiersze, każdy wiersz jest odpowiedzialny za taktykę. Taktyka, która ma najwięcej punktów jest używana przez program. Wszystko byłoby fajnie, ale muszę pobrać miejsce na którym stoi w pliku, aby później ją nadpisać.

Dobra, rzeczywiście jest coś z tą tablicą abc

Dobra już wiem gdzie jest błąd
P-45650
« 1 »
  Strona 1 z 1