Vercevales Temat założony przez niniejszego użytkownika |
Tablica znaków. » 2010-12-31 15:12:17 Uczę się obsługi tablicy znaków. I zaczynają się problemy. Opiszę w źródle: #include <iostream>
int main() { char c; int x = 0; char tab[ 1 ][ x ]; std::cout << "Podaj słowo: "; do { std::cin >> c; tab[ 1 ][ x ] = c; std::cout << "aktualnie w tablicy, na pozycji " << x << " jest litera: " << tab[ 1 ][ x ] << std::endl; std::cout << "cała tablica aktualnie, do pozycji " << x << " zawiera: " << tab[ 1 ] << " części podanego słowa" << std::endl; x++; } while( ); std::cout << " " << std::endl; std::cout << "Podane słowo: "; std::cout << tab[ 1 ]; std::cout << " " << std::endl; return 0; }
Po uruchomieniu i wpisaniu karol, otrzymuję: Podaj słowo: karol aktualnie w tablicy, na pozycji 0 jest litera: k cała tablica aktualnie, do pozycji 0 zawiera: k�w części podanego słowa aktualnie w tablicy, na pozycji 1 jest litera: a cała tablica aktualnie, do pozycji 1 zawiera: kaw części podanego słowa aktualnie w tablicy, na pozycji 2 jest litera: r cała tablica aktualnie, do pozycji 2 zawiera: kar części podanego słowa aktualnie w tablicy, na pozycji 3 jest litera: o cała tablica aktualnie, do pozycji 3 zawiera: karo��蔥�R� części podanego słowa aktualnie w tablicy, na pozycji 4 jest litera: l cała tablica aktualnie, do pozycji 4 zawiera: karol�蔥�R� części podanego słowa
a dalszych poleceń już nie wykonuje (tych po while() ). jak to rozwiązać? Nie chcę stringów, tylko chary, bo póki co o nich się uczę i chcę się nauczyć nimi posługiwać :)
|
|
|
DejaVu |
» 2010-12-31 15:15:02 int x = 0; char tab[ 1 ][ x ];
Co z tego, że się to skompiluje, jak to program wywali ;p Nie można tworzyć tablic na stosie/stercie programu o zmiennym rozmiarze - chyba, że chcesz sobie zrobić kuku. |
|
Vercevales Temat założony przez niniejszego użytkownika |
» 2010-12-31 15:16:18 nierozumiem ^^
Już kiedyś zrobiłem tablicę o zmiennym rozmiarze, i działało wszystko :) |
|
DejaVu |
» 2010-12-31 15:19:10 Chcesz stworzyć tablicę, która ma zero elementów. Powodzenia :P W C przyjęło się, że tworzysz tablice o określonej liczbie znaków (na górkę) i liczysz, że użytkownik będzie na tyle uczciwy, że nie wpisze więcej znaków niż przewidział programista :) Z czasem doszły funkcje, które zabezpieczają przed pisaniem poza buforem ale skoro chcesz tak intensywnie walczyć z łańcuchami znaków w stylu C to nie będę Ci tego bronił ;p
/edit:
Kiedyś też robiłem i działało, ale tego nie należy robić i tyle :) |
|
Vercevales Temat założony przez niniejszego użytkownika |
» 2010-12-31 15:33:43 #include <iostream>
int main() { char c; int x = 0; char tab[ 1 ][ 100 ]; std::cout << "Podaj słowo: "; do { std::cin >> c; tab[ 1 ][ x ] = c; std::cout << "aktualnie w tablicy, na pozycji " << x << " jest litera: " << tab[ 1 ][ x ] << std::endl; std::cout << "cała tablica aktualnie, do pozycji " << x << " zawiera: " << tab[ 1 ] << " części podanego słowa" << std::endl; x++; } while( x != 100 ); std::cout << " " << std::endl; std::cout << "Podane słowo: "; std::cout << tab[ 1 ]; std::cout << " " << std::endl; return 0; }
I teraz jest jeszcze lepiej ^^ Podaj słowo: karol aktualnie w tablicy, na pozycji 107 jest litera: � cała tablica aktualnie, do pozycji 107 zawiera: k części podanego słowa aktualnie w tablicy, na pozycji 108 jest litera: a cała tablica aktualnie, do pozycji 108 zawiera: l części podanego słowa aktualnie w tablicy, na pozycji 109 jest litera: r cała tablica aktualnie, do pozycji 109 zawiera: m części podanego słowa aktualnie w tablicy, na pozycji 110 jest litera: o cała tablica aktualnie, do pozycji 110 zawiera: n części podanego słowa aktualnie w tablicy, na pozycji 111 jest litera: l cała tablica aktualnie, do pozycji 111 zawiera: o części podanego słowa
|
|
DejaVu |
» 2010-12-31 15:34:26 Piszesz poza tablicą. Indeksowanie tablic zaczyna się od zera. |
|
Vercevales Temat założony przez niniejszego użytkownika |
» 2010-12-31 15:36:48 przecież zaczynam od zera |
|
DejaVu |
» 2010-12-31 15:40:15 No... tab[ 1 ][ x ] , tab[ 1 ] itd... |
|
« 1 » 2 |