Problem z zmiennymi w petli
Ostatnio zmodyfikowano 2011-12-15 17:01
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 :/
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 ) { 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 ) { 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 ) { 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; } } }
|
|
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. |
|
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: 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. |
|
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 |
|
« 1 » |