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 » |