Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem C - funkce pro výpis pole

Zdravím.
Pokusím se popsat o co se snažím:
Například mám jednorozměrné pole s názvem obsah, které obsahuje nějaký řetězec. Pak mám pole volba, do kterého načítám řetězec z klávesnice. Načtu tedy např. slovo "obsah". Teď budu chtít po funkci, aby použila to slovo "obsah" a vypsala řetězec, který je uložen v poli obsah (tedy to, co načtu z klávesnice bude název pole, které se má vypsat). Pokud bych měl třeba ještě pole s názvem jmeno, které obsahuje řetězec "Petr" a zadal bych z klávesnice "jmeno", funkce by měla opět vypsat to pole, které jsem zadal a výstup by tedy měl být "Petr".
Doposud jsem to měl vyřešeno porovnáváním řetězců (např. je-li v poli volba řetězec "obsah", vypiš pole obsah). To ovšem znamená nadefinovat akci pro každé pole (já jich mám 6). Proto bych to chtěl vyřešit tak, jak jsem popisoval výše, tj. funkce si ten název pole, které má vypsat, vezme např. z pole volba.
Díky za případnou radu.

Předmět Autor Datum
Nenapadá mě jediný příklad, k čemu by to, o co se snažíš, mohlo být dobré. To, co chceš, je podle mě…
JoDiK 05.12.2011 14:40
JoDiK
funkce si ten název pole, které má vypsat, vezme např. z pole volba. no ved to sa da len porovnavan…
MM.. 05.12.2011 16:33
MM..
t.j. principialne to robis blbo ze mas kazde pole osobitne s nejakymi nazvami, mas mat pole polí, na…
MM.. 05.12.2011 16:42
MM..
Díky za radu. Pole struktur je pro mě zatím velká neznámá, ale alespoň vím, pod čím hledat. poslední
Niko Bellic 05.12.2011 17:07
Niko Bellic

Nenapadá mě jediný příklad, k čemu by to, o co se snažíš, mohlo být dobré.
To, co chceš, je podle mě nesmysl, protože výsledkem snažení programátora je strojový kód, kde se na nějaké názvy proměnných nehraje, takže nelze napsat příkaz "do proměnné, jejíž název je uložen v jiné proměnné něco ulož". (Přesněji - v interpretovaných jazycích to asi nějak možná jde, matně se mi vybavuje jakýsi příkaz Evaluate nebo tak nějak).
Pokud bys něco takového co popisuješ chtěl opravdu naprogramovat, můžeš to obejít tak, že si nadefinuješ dvojrozměrné pole, kde v jedné položce bude ten tvůj název a ve druhé hodnota.
Pak přečteš z klávesnice "jméno", to si vyhledáš mezi prvními položkami dvojrozměrného pole a druhá z těch položek obsahuje ten tvůj požadovaný výstup.

funkce si ten název pole, které má vypsat, vezme např. z pole volba.

no ved to sa da len porovnavanim, v cykle porovnavas pole volba a zistis na ktorom indexe v poli je dane slovo. Potom pracujes s tym cislom (indexom), podla ktoreho vyberes spravne pole z pola polí.
Resp inac - budes mat pole struktur, kde kazda struktura bude obsahovat 1.) slovo ktore sa porovnava, a 2. pointer na spavne pole (alebo ine nalezitosti) k tomu slovu. Aby to bolo vsetko pri sebe (nazov pola a aj jeho data).
Teoreticky sa da v zdrojaku potom ta definicia poli trochu "zautomatizovat" makrami (ktorym nazov pola sucasne das do nejakeho retazca do struktury s tym polom).

t.j. principialne to robis blbo ze mas kazde pole osobitne s nejakymi nazvami, mas mat pole polí, napr.

typedef struct _polestruc {
const char *nazov;
int data_pola[10];
} polestruc;

polestruc mojepolia[] =
{
  { "obsah", {10,20,30,40,50,60,70,80,90,100} },
  { "inepole", {1,2,3,4,5,6,7,8,9,10} }
}

int* dajdata(char *zadanyretazec)
{
for(int i=0; i<sizeof(mojepolia)/sizeof(mojepolia[0]); i++)
  if(strcmp(zadanyretazec, mojepolia[i].nazov) == 0)
    return(mojepolia[i].data_pola);  // pole najdene
return NULL;  // pole nenajdene
}

ak chces mat polia dynamicke tak si treba dat do struktury aj pocet dat a nie int pole ale pointer na int, apod, toto bol len jednoduchy priklad k tomu co si sa pytal a nie dokonaly program :)

Zpět do poradny Odpovědět na původní otázku Nahoru