Dodaj do ulubionych

[C] Przepisanie z int na char

01.02.06, 20:35
Mam tablice 13 elementów typu int(rozdana talia kart) o różnych wartościach
(losowe pomiędzy 1 a 52) i potrzebuję, aby zamieniał te liczby na odpowiednie
karty i je wpisywał do dwóch innych tablic (w jedej karty, np. A, 2, W, K, a w
drugiej kolory dla każdej z kart), jako char.Na razie robię to tak:

void przepisywanie(int gracz1[], int gracz2[], int gracz3[], int gracz4[])
/*funkcja przepisujaca dane uzyskane z losowania na karty*/
{ int i; char karty1[13], karty2[13], karty3[13], karty4[13];
char kolory1[13], kolory2[13], kolory3[13], kolory4[13];
for (i = 0; i<=12; i++) {
if((gracz1 /13) == 0) strcpy(karty1 , "A"); /*gracz 1 */
if((gracz1 /13) == 0) strcpy(karty1 , "2");
//itd dla pozostałych kart
if((gracz1 /13) == 0) strcpy(kolory1 , "t");
if((gracz1 /13) == 0) strcpy(kolory1 , "k"); } //itd. dla pozostałych kolorów
for (i = 0; i<=12; i++) {
printf("%d %c %c ", gracz1 , karty1 , kolory1 ); } }/*koniec funkcji
przepisywanie*/

Dla pozostałych tablic kart i kolorów chcę zrobić to samo. Kompiluje się ale
po uruchomieniu wyskakuje bład: W twoim programie zgłoszono naruszenie praw
dostępu(błąd segmentacji).A poprzednia funkcja, która tworzy tablice
gracz1[13] i pozostałych 'graczy' działa dobrze.Proszę o pomoc.
Edytor zaawansowany
  • po pierwsze - nie za bardzo kumam jak Ty tlumaczysz te inty na opisy kart.. a
    wlasciwie to nie kumam jakim prawem to mialo by wogole dawac sensowny wynik,
    ale o tymna koncu

    druga sprawinka, najpierw 'tlumaczysz' inty na opisy kart i kolorow, potem je
    wyswietlasz. ale wszezdie w tlumaczeniu uzywasz strcpy, ktore za kazdym razem
    zamazuje Ci poprzednio wpisane dane - chyba raczej chciales uzyc strcat..

    trzecia sprawa - zarowno strcpy jak i strcat kopiuja stringi. string zawsze na
    koncu ma niejawny znak \0, czyli string "A" ma 2 znaki dlugosci. wklejenie 13
    opisow postaci "A","4" czy "5" do tablicy char kolory[13] moze spowodowac ci
    blad krytyczny poniewaz.. sprobujesz do tablicy wpisac 14 charow! 13 liter i na
    koncu \0!

    a co do tego 'tlumaczenia':
    uum.. wybacz pytanie, ale za Chiny Ludowe nie rozumiem co to ma robic..

    for(i=0;i<=12;i++)
    {
    if((gracz1 /13) == 0) ..
    if((gracz1 /13) == 0) ..
    if((gracz1 /13) == 0) ..
    if((gracz1 /13) == 0) ..
    if((gracz1 /13) == 0) ..
    }


    gracz1 ma typ int[], domyslam sie ze jest to tablica 13 elementow. wiec jakie
    znowu dzielenie? wogole czemu dzielenie wskaznika na tablicie? i czemu ==0? i
    czemu to wszytko w petli i=0..12 ?:)

    czy to nie aby mialo byc:
    uum.. wybacz pytanie, ale za Chiny Ludowe nie rozumiem co to ma robic..

    for(i=0;i<=12;i++)
    {
    if((gracz1 [i]) == 1) //AS
    if((gracz1 [i]) == 2) //dwojka
    if((gracz1 [i]) == 3) //trojka
    if((gracz1 [i]) == 4) ..
    if((gracz1 [i]) == 5) ..
    }

    ?:)
  • oooops!
    to drugie "uum.. wybacz pytanie, ale za Chiny Ludowe nie rozumiem co to ma
    robic.." to oczywiscie blad za duzego kopiuj-wklej :)
  • 01.02.06, 21:33
    Chodzi o to, że talia ma 52 karty, a każdy kolor ma ich trzynaście, więc chodzi
    mi o to, żeby to dzielić, bo co trzynasta karta to as, co trzynasta to dwójka
    itd. a z drugiej strony to karty od 1 do 13 to trefle, od 14 do 26 kara itd.
    Dlatego takie dziwne coś chcę zastosować bo nie mam na to innego pomysłu. A co
    do wcześniejszego to masz rację z tym znakiem końca stringa-zapomniałam o tym.
    gracz1[] ma rzeczywiście definicje int gracz1[13] i jest takich tablic 4 (w
    sumie dają 52 karty i są już w tych tablicach potasowane i rozdane na czterech
    graczy).Stąd całe zamieszanie, że póki co gracze mają karty w postaci
    losowych(to dobrze) liczb, ale chyba każdy wolałby dostać asa trefl, dwójkę pik,
    króla karo itd a nie kartę nr 32, kartę nr8...:) Chyba, że masz pomysł, jak by
    to inaczej zrobić, to jesetm otwarta na propozycje.
  • z losowymi wartosciami musisz uwazac, bo one beda *losowe* i gracze dostana
    *losowe* karty.. a przeciez po rozdaniu talii gracze w sumie maja 4 asy, 4
    kroli itd.. totalnie losowe liczby tego nie zagwarantuja!

    nie wiem jak w tej chwili masz napisane 'rozdawanie kart'.
    zakladajac ze jednak masz juz 4 tablice, i ze kazda juz jest wypelniona
    zestawem trzynastu int'ow reprezentujacych wartosci kart
    i tak na przyklad owo reprezentowanie mowi ze:
    int karta
    1 -> As
    2 -> dwojka
    3 -> trojka
    ..
    11 -> walet
    12 -> dama
    13 -> krol

    to tlumaczenie powinno wygladac mnie-wiecej tak:
    (napisalbym to deko inaczej, ale staram sie wprowadzic jak najmniej zmian
    wzgledem Twojego kodu)

    //postac tablicy - int wartosc_kart_gracza_1[13];
    char opiskart[14]; //"bufor" na napis
    opiskart[0]=0; //ustawiamy na poczatku znak \0 - czyli bufor to pusty string
    for(i=0;i<13;++i)
    {
    if(wartosc_kart_gracza_1[i] == 1)strcat(opiskart,"A");
    if(wartosc_kart_gracza_1[i] == 2)strcat(opiskart,"2");
    if(wartosc_kart_gracza_1[i] == 3)strcat(opiskart,"3");
    ..
    if(wartosc_kart_gracza_1[i] == 11)strcat(opiskart,"W");
    if(wartosc_kart_gracza_1[i] == 12)strcat(opiskart,"D");
    if(wartosc_kart_gracza_1[i] == 13)strcat(opiskart,"K");
    }
    //w tym miejscu mamy przygotowany opis dla gracza 1
    //jest on poprawnym prostym stringiem i mozna go wypisac
    printf("Twoje karty: %s\n",opiskart);

    w podobny sposob mozesz wygenerowac opis kolorow..
    ALE reprezentacje kolorow musisz tez gdzies trzymac, najprosciej w osobnych
    tablicach
  • 01.02.06, 22:17
    Ok, już rozumiem. Wielkie dzięki :)

Popularne wątki

Nie pamiętasz hasła lub ?

Zapamiętaj mnie

Nie masz jeszcze konta? Zarejestruj się

Nakarm Pajacyka
Agora S.A. - wydawca portalu Gazeta.pl nie ponosi odpowiedzialności za treść wypowiedzi zamieszczanych przez użytkowników Forum. Osoby zamieszczające wypowiedzi naruszające prawo lub prawem chronione dobra osób trzecich mogą ponieść z tego tytułu odpowiedzialność karną lub cywilną. Regulamin.