C - kopirovani struktur do polí

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Odpovědět
gore227
nováček
Příspěvky: 26
Registrován: 23 bře 2014 12:59

C - kopirovani struktur do polí

Příspěvek 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]);
	}



Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7415
Registrován: 23 pro 2010 09:23

Re: C - kopirovani struktur do polí

Příspěvek 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ší.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)
gore227
nováček
Příspěvky: 26
Registrován: 23 bře 2014 12:59

Re: C - kopirovani struktur do polí

Příspěvek 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.
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7415
Registrován: 23 pro 2010 09:23

Re: C - kopirovani struktur do polí

Příspěvek 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:
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)
Odpovědět

Zpět na „Programování a tvorba webu“