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

Tablica znaków.

Ostatnio zmodyfikowano 2010-12-31 19:10
Autor Wiadomość
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:

C/C++
#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; /* działa, wyświetla że  na danej pozycji jest kolejna litera */
        std::cout << "cała tablica aktualnie, do pozycji " << x << " zawiera: " << tab[ 1 ] << " części podanego słowa" << std::endl; /* tu się zaczyna problem, niby wyświetla te kolejne litery już obok siebie, ale po nich dodaje inne losowe, lub różne znaki */
        x++;
    } while( /*  tu to nie wiem co wpisać, więc aby się skompilował wpisuję np 1==1 */ );
    // poniżej to już nie działa
    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ć :)
P-26013
DejaVu
» 2010-12-31 15:15:02
C/C++
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.
P-26014
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 :)
P-26015
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 :)
P-26017
Vercevales
Temat założony przez niniejszego użytkownika
» 2010-12-31 15:33:43
C/C++
#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
P-26021
DejaVu
» 2010-12-31 15:34:26
Piszesz poza tablicą. Indeksowanie tablic zaczyna się od zera.
P-26022
Vercevales
Temat założony przez niniejszego użytkownika
» 2010-12-31 15:36:48
przecież zaczynam od zera
C/C++
int x = 0;
P-26024
DejaVu
» 2010-12-31 15:40:15
No...
tab[ 1 ][ x ]
,
tab[ 1 ]
 itd...
P-26025
« 1 » 2
  Strona 1 z 2 Następna strona