| Autor | Správa |
xyzz
 Užívateľ
 Založený: 15.10.2011 Príspevky: 13
 | Zaslal: Ne 11.12.11 13:16 |   |
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;
}
}
|
|
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1049
 | Zaslal: Ne 11.12.11 13:57 |   |
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 ). |
| |
   |
 |
xyzz
 Užívateľ
 Založený: 15.10.2011 Príspevky: 13
 | Zaslal: Ne 11.12.11 15:43 |   |
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... |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 1049
 | Zaslal: Ne 11.12.11 16:34 |   |
| 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. |
| |
   |
 |
|
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.
|
|