brak widzialnosci zmiennych
Ostatnio zmodyfikowano 2010-08-17 10:01
ricardo83 Temat założony przez niniejszego użytkownika |
brak widzialnosci zmiennych » 2010-08-16 17:34:21 witam pisze program ktorego zadaniem jest ladowanie danych z pliku a nastepnie zapis danych do innego pliku. z ladowaniem danych z pliku sobie poradzilem (m.in. dzieki VND) ale problem pojawia sie przy zapisie tych danych do pliku, a mianowicie pewne zmienne jak gdyby tracily swoja widzialnosc i nie mozna sie do nich odwolac. taki komentarz w kodzie pokazuje czego czepia sie kompilator //<------------------------ #include <iostream> #include <fstream> #include <ctime>
using namespace std;
int main() { fstream ladowanie; char bufor[ 10 ]; int tablica[ 3 ]; int i = 0, k = 0; ladowanie.open( "satimage.txt", ios::in | ios::binary ); if( ladowanie.is_open() ) { cout << "Poprawnie zaladowano plik :)\n"; while( k < 3 ) { bufor[ i ] = ladowanie.get(); if( isdigit( bufor[ i ] ) || bufor[ i ] == '.' ) { i++; } else { if( i > 0 ) { bufor[ i ] = '\0'; sscanf( bufor, "%d", & tablica[ k ] ); cout << tablica[ k ] << " "; k++; i = 0; } } } int g = tablica[ 2 ]; int s = tablica[ 1 ] + 1; int tablica_wlasciwa[ g ][ s ]; int w = 0, x = 0, i = 0; while( !ladowanie.eof() ) { bufor[ i ] = ladowanie.get(); if( isdigit( bufor[ i ] ) || bufor[ i ] == '.' ) { i++; } else { if( i > 0 ) { bufor[ i ] = '\0'; sscanf( bufor, "%d", & tablica_wlasciwa[ w ][ x ] ); i = 0; if( x < s - 1 ) { x++; } else { if( w < g ) { w++; x = 0; } } } } } ladowanie.close(); } else { cout << "ERROR\n"; } ofstream zapis; zapis.open( "zapisywanie.txt", ios::out ); if( zapis.is_open() ) { cout << "Udalo sie zaladowac plik do zapisywania danych\n"; zapis << endl; w = 0, x = 0; while( w < g ) { while( x < s ) { zapis << tablica_wlasciwa[ w ][ x ] << " "; x++; } zapis << endl; w++; } zapis.close(); } else { cout << "ERROR\n"; } return 0; }
wynik proby kompilacji C: \Documents and Settings\Jacek\Moje dokumenty\c++\obsluga_pilkow_2\main.cpp||In function 'int main()': | C: \Documents and Settings\Jacek\Moje dokumenty\c++\obsluga_pilkow_2\main.cpp|129|error: 'w' was not declared in this scope| C: \Documents and Settings\Jacek\Moje dokumenty\c++\obsluga_pilkow_2\main.cpp|129|error: 'x' was not declared in this scope| C: \Documents and Settings\Jacek\Moje dokumenty\c++\obsluga_pilkow_2\main.cpp|130|error: 'g' was not declared in this scope| C: \Documents and Settings\Jacek\Moje dokumenty\c++\obsluga_pilkow_2\main.cpp|132|error: 's' was not declared in this scope| C: \Documents and Settings\Jacek\Moje dokumenty\c++\obsluga_pilkow_2\main.cpp|134|error: 'tablica_wlasciwa' was not declared in this scope| ||=== Build finished: 5 errors, 0 warnings ===| Pozdrawiam |
|
ison |
» 2010-08-16 17:40:28 dlaczego uważasz że powinny być widzialne? przykładowo: int main() { { int a; } a = 5; }
jeśli chcesz aby była 'widzialna' wszędzie to zadeklaruj ją globalnie albo chociaż poza wszelkimi pętlami i postaraj się robić większe wcięcia bo sam się potem pogubisz w tym wszystkim |
|
pekfos |
» 2010-08-16 17:41:59 one chyba nawet nie są w tym samym bloku w którym ich używasz. zrób je jako globalne. W tym małym programie to raczej nie zaszkodzi. |
|
ricardo83 Temat założony przez niniejszego użytkownika |
» 2010-08-16 18:14:45 no rzeczywiscie stworzylem te zmienna dopiero w bloku if i nie powinna byc widzialna. hmm ale jak ja zadeklarowac? to jaki powinna miec wymiar dowiaduje sie po wczytaniu dopiero 1 wiersza pliku(gdzie wlasnie zapisany jest wymiar). jedno rozwiazanie jakie mi przychodzi do zadeklarowac tez zmienna z odpowiednio wiekszym wymiarem ale wtedy bedzie to marnotrawstwo pamieci:( moze macie jakis inny pomysl ?
Pozdrawiam |
|
pekfos |
» 2010-08-16 18:22:25 int tablica_wlasciwa[ g ][ s ]; jakim cudem to nie błąd? nie musisz deklarować zmiennych jak tylko pojawi się możliwość ich inicializacji. Zrób je globalne. |
|
ricardo83 Temat założony przez niniejszego użytkownika |
» 2010-08-17 09:27:51 int tablica_wlasciwa[g][s]; jakim cudem to nie błąd?wiem ze deklaracja wymiarow tablicy powinna nastapic jeszcze przed kompilacja ale akurat w tym programie ktory napisalem wymiar tablicy jest podany w pierwszej linii pliku, ktory bedzie dopiero ladowany:(
ale jak zadeklarowac tablice nie znajac jej wymiaru?
Pozdrawiam
|
|
pekfos |
» 2010-08-17 10:01:57 np tak: Wskaźniki i dynamiczna alokacja się kłaniają |
|
« 1 » |