Pętla z implementacją char ?

0

Witam,

Czy w języku C jest jakaś możliwość, żeby w pętli for() zapisać, że w pierwszym kroku x= tablica, w drugim x = tablica2 itd ?

Chodzi mi o to, że mam sobie 3 tablice 3 elementowe, chciałbym zrobić na nich switch w pętli for, żeby nie robić 3 razy tego samego switch.

Pozdrawiam

0

Ogólnie jeżeli masz zmienne w stylu tablica, tablica2, tablica3, to najprawdopodobniej powinna to być tablica tablic. Dodatkowo, powinieneś najprawdopodobniej oddzielić kodu który chcesz wykonać dla każdej tablicy do funkcji.

0

Albo tablica wskaźników na tablicę. Jak dobrze zdefiniujesz to jak zwiększysz wskaźnik o 1, to przejedzie na następną tablicę. Ale prostszym rozwiązaniem wydaje się tablica tablic, czyli po prostu tablica dwuwymiarowa

0

Szukam w sieci jak użyć tej tablicy dwuelementowej w C, ale nic konkretnego znaleźć nie mogę.

W jaki sposób mogę do tablicy przypisać inne tablice w sensie:

tablica_tablic[0] = tablica1
tablica_tablic[1] = tablica2

itd

Przy czym tablica1 i 2 są typu char.

Pozdrawiam

0

char tab[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

i do elementów odnosisz się tak:
tab[2][1] (tablica nr 2, element nr 1 - oczywiscie numerowane od 0)

możesz zrobić też tak:
char* tab[3] = {tablica1,tablica2,tablica3};
i odnosisz się tak jak wyżej

0

int tab[2][9]; //to tablica tablic(dwuwymiarowa), dokładniej trzy tablice dzięsięcioelementowe (tablice indeksujemy od zera).

Co do pytania jak przypisać tablice do tablicy, no to pętla for.
W przypadku tablicy dwuwymiarowej będzie to wyglądało tak:
for (int i=0; j<drugi_wymiar_tablicy;i++)
druga_tablica[1][i]=tab[1][i];

Przepisujemy każdy element po kolei.

Nie można robić tak jak napisałeś:

tablica_tablic[0] = tablica1

Ponieważ tablica1 to adres tablicy (jej pierwszego elementu), a tablica_tablic[0] to wartość elementu tej tablicy spod indeksu 0.

0

Dziękuję za odpowiedzi. A więc robię tak:

char c[20],d[20],e[20];
char* tab[3] = {c,d,e};

I jak teraz mogę wydrukować printf wyraz, który jest w tab[0] ? Na przykład c = 'bolek' i jak wydrukować to używając tab[0] ?

Pozdrawiam

0

Super :) Działa, dziękuję.

Jeszcze mam jedno pytanie, czy jest jakaś szansa, zrobienia switch na tablicy albo zapisania tego jakoś podobnie ?
W każdej tablicy jest wyraz 3 elementowy, który może być podany na 7 możliwości przez scanf, na przykład 'kot' i 'cat'..., jest jakaś szansa, żeby nie robić tak dużo ifów (7) ?

Pozdrawiam

0

tak. jeśli zamiast 3 elementów char zrobisz 4 elementy typu char to będziesz miec z tego korzyści:

#include <stdio.h>

#define CHAR3(a,b,c) ((a)|((b)<<8)|((c)<<16))

int main()
{
  char tab[4];
  scanf("%s",tab);
  switch(*(int*)tab)
    {
      case CHAR3('a','b','c'):
        {
          printf("1\n");
          break;
        }
      case CHAR3('c','d','e'):
        {
          printf("2\n");
          break;
        }
      case CHAR3('c','d','f'):
        {
          printf("3\n");
          break;
        }
    }
  return 0;
}

ewentualnie jeśli ilość używanych znaków jest ograniczona to możesz zapisywać od razu te 3 znaki jako liczbe

1 użytkowników online, w tym zalogowanych: 0, gości: 1