Stránka 1 z 1

C - kopirovani struktur do polí

Napsal: 23 bře 2014 13:09
od gore227
Ahoj,
neumím přijít na toto zadání:

"Zkontrolujte, zda názvy všech skupin i alb začínají velkým písmenem. Pokud ne, opravte je"
Byl bych rád, kdyby mě někdo navedl, co je špatně. Díky.

Kód: Vybrat vše

.
.
.
.
   strcpy(a[0][0],prvni.kapela);
   strcpy(a[1][0],druhy.kapela);
   strcpy(a[2][0],treti.kapela);

   strcpy(b[0][0],prvni.nazev);
   strcpy(b[1][0],druhy.nazev);
   strcpy(b[2][0],treti.nazev);

   for(i=0; i < 3; i++)
   {
      if (a[i][0]>='A' && a[i][0]<='Z') && (b[i][0] >= 'A' && b[i][0] <= 'Z')
         continue;
      else
      {
         a[i][0] =+'32';
         b[i][0] =+'32';
      }
   }

   for(i=0; i < 3; i++)
   {
      puts(a[i]);
      puts(b[i]);
   }




Re: C - kopirovani struktur do polí

Napsal: 23 bře 2014 13:18
od faraon
Nejdřív máš a[0][0], a na konci vypisuješ a[0], není to trochu divné?

Ukaž i deklaraci těch polí, ať je to jasnější.

Re: C - kopirovani struktur do polí

Napsal: 23 bře 2014 13:23
od gore227

Kód: Vybrat vše

typedef struct
{
   char kapela[20], nazev[50];
   int  pocet;
}
SKUPINA;

int main()
{
   SKUPINA prvni,druhy,treti;
   int i,j;
   char skupina[20], a[3][20], b[3][20];


Ten vypis byl jen tak, hází mi to errory už v tom jak se to kopiruje přes funkci strcpy.

Re: C - kopirovani struktur do polí

Napsal: 23 bře 2014 14:08
od faraon
Takže takhle:
  1. Pole a[3][20] znamená tři řádky po dvaceti znacích, a nemůžeš kopírovat řetězec do jednoho bajtu. Doslova to jsou tři ukazatele na pole znaků, ale to je technický detail ;-)

    Kód: Vybrat vše

       strcpy(a[0],prvni.kapela);
       strcpy(a[1],druhy.kapela);
       strcpy(a[2],treti.kapela);

       strcpy(b[0],prvni.nazev);
       strcpy(b[1],druhy.nazev);
       strcpy(b[2],treti.nazev);
  2. Podmínka musí být v jedné závorce, když máš víc podmínek, musí být všechny uvnitř jedné závorky, takže ne if () && () ale if (() && ()):

    Kód: Vybrat vše

    if ((a[i][0]>='A' && a[i][0]<='Z') && (b[i][0] >= 'A' && b[i][0] <= 'Z'))
  3. V apostrofech se uvádí znak, bez apostrofů jeho kód. Ty aspostrofy způsobí že ti překladač dosadí kód toho znaku automaticky, podle použitého kódování. Sice není přípiš pravděpodobné že se s tím setkáš (pokud nebudeš programovat mainframy IBM), ale kromě ASCII existuje i EBCDIC, kde jsou písmena rozmístěná úplně jinak. Takže je vždycky lepší psát znak v apostrofech místo jeho číselného kódu.
    Máš tedy na vybranou:

    Kód: Vybrat vše

             a[i][0] += ' ';
             b[i][0] += 32;
  4. A bacha, operátory =+ a =- se používaly v klasickém K&R v sedmdesátých letech, dnes (to jest minimálně od roku 1988) jsou opačně, protože způsobovaly nejednoznačnost při překladu. Takže vždy += a -=! Nebo to radši napiš celé po pascalsku, ono se to ve štábní kultuře větších projektů vyžaduje, tyhle zkratky zhoršují přehlednost a udržovatelnost kódu. Ne že bych je s oblibou nepoužíval také :lol: