IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @716
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Virtuálna kancelária BA

registračné sídlo, poštové služby, sekretárka, parkovanie - od 40 € www.companyhouse.eu

Výpredaj matracov

Zľavy 50% Len do vypredania zásob www.vypredajmatracov.sk

Viac ako elektronická cigareta

INNOKIN AIO TANK, Štýl a luxus v púzdre Multifunkčná a nadčasová e-cigareta www.elcigshop.sk

BISHOLIN už aj na Slovensku

Unikátny preparát na pohybové ochorenia: reuma, svaly, šľachy ale aj iné problémy www.detoxipan.sk

SPOVEĎ ZRELEJ ŽENY: Týmto si

mladé ženy ničia vzťahy. Päťdesiatpäťročná Erika nemala úplne feminity.zoznam.sk

C naplnenie pola

Zaslať odpoveď
AutorSpráva
xyzz
Užívateľ
Užívateľ

Založený: 15.10.2011
Príspevky: 13

PríspevokZaslal: Ne 11.12.11 13:16Odpovedať s citátomNávrat hore

Pokusam sa naplnit pole znakmi, teda slovami zo suboru. Slova v subore su klasicky v tvare :
jedna
dva
tri

Tu mam kod, lenze sa mi tam zrejme uklada ascii hodnota, no mam v tom dost zmatok, dufam, ze mi niekto bude vediet poradit ako to ma byt a preco...
kód:

wchar_t *slovo;
slovo = (wchar_t *) malloc(100*sizeof(wchar_t));

while ((ch = fgetwc(f1)) != WEOF)
  {
    if (ch == '\n')
    {
      slovo[i] = slovo[i] + '\0';
      i++;
      n++;
    }
    else
    {
      slovo[i] = slovo[i] + ch;
    }
  }

Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1049

PríspevokZaslal: Ne 11.12.11 13:57Odpovedať s citátomNávrat hore

Najprv ta upozornim na jeden zlozvyk: v jazyku C by sa nemala pretypovat navratova hodnota z funkcie malloc. Neviem, ci ste sa to tak ucili na skole, ak ano, tak si to uz nechaj, ale kazdopadne sa to neodporuca. Staci takto:
kód:
slovo = malloc( 100 * sizeof( wchar_t ) );


K tvojmu problemu: pises, ze chces iba ulozit obsah suboru do pola. Tak preco robis toto:
kód:
    if (ch == '\n')
    {
        slovo[i] = slovo[i] + '\0';


Aj tak, toto urcite nerobi nic dobre, takyto zapis sa pouziva v pascale, v C-cku su retazce reprezentovane adresami. Nestacilo by nieco taketo? ( za predpokladu, ze n charakterizuje nove slovo )
kód:
while ( ( ch = fgetwc( f1 ) ) != WEOF )


    slovo[i++] = ch;
   
    if (ch == '\n')
    {
        n++; 
    }

}


Ty si povodne chcela oddelovat slova nulovym znakom ( i ked nespravnym sposobom ), bolo to tak v zadani, alebo to bol tvoj zamer? Lebo potom by si mohla pouzit trebars pole stringov ( kedze aj pri vypisovani sa string vypisuje pokial sa nenarazi na nulovy znak, cize dalsie retazce by sa nevypisali ).
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
xyzz
Užívateľ
Užívateľ

Založený: 15.10.2011
Príspevky: 13

PríspevokZaslal: Ne 11.12.11 15:43Odpovedať s citátomNávrat hore

No vlastne kazda polozka v poli by malo byt jedno slovo, preto som tam chcela dat ze aby bolo zakoncenie kazdeho slova '\0', zadani ale nic take neni

// pridané po 15 minútach od posledného príspevku

S tym kodom to uz funguje, dakuejm Akurat teraz zase neviem, ako sa dostanem k jednotlivym slovam, teda da sa to vobec? Kebyze tie slova chcem zapisat do dalsieho suboru, tak takto to funguje :
kód:
kód:
fwprintf(f2, L"%ls", slovo);



Ale ako sa dostanem napriklad k tretiemu slovu? Lebo tie slova budem musiet radit podla abecedy, tak sa k nim musim dostat jednotlivo... Alebo teda zatial celkovo zapis po jednom, nieco v style :
kód:
kód:

for (i = 0; i < n; i++)
{
  fwprintf(f2, L"%ls", slovo[i];
}

Konkretne toto mi hadze Segmentation fault...
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 1049

PríspevokZaslal: Ne 11.12.11 16:34Odpovedať s citátomNávrat hore

xyzz napísal:
Ale ako sa dostanem napriklad k tretiemu slovu? Lebo tie slova budem musiet radit podla abecedy


Jednoducho - miesto hladania nuly v retazci budes hladat znak '\n'. Cize ak hladas tretie slovo, budes v cykle hladat 2-krat znak '\n' ( prve_slovo - \n - druhe_slovo - \n - tretie_hladane_slovo ).

xyzz napísal:

kód:

for (i = 0; i < n; i++)
{
  fwprintf(f2, L"%ls", slovo[i];
}

Konkretne toto mi hadze Segmentation fault...


To preto, lebo slovo je typu wchar_t, nie wchar_t* aky ocakava funkcia. Slovo je typu wchar_t*, lenze polozky pola ( cize slovo[akekykolvek_index] ) uz su iba wchar_t.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd