Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 5 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
C linearne viazany zoznam

Registrovaný: 15.10.11
Prihlásený: 07.03.12
Príspevky: 13
Témy: 6
Príspevok NapísalOffline : 11.12.2011 17:20

Nemozem prist na to, preco mi to preskoci nacitanie druheho a stvrteho prvku :roll:
Kód:
 int i = 0;
   
typedef struct prvok {
  int hodnota;
  struct prvok *dalsi;
} TPrvok;

TPrvok *z, *k, *p;

void pridaj(TPrvok **z, TPrvok **k)
{
  TPrvok *p;
  if (*z == NULL)
  {
    printf("ahoj\n");
    *z = (TPrvok*)malloc(sizeof(TPrvok));
    (*z)->hodnota = getchar();
    (*z)->dalsi = NULL;
    *k = *z;
  }
  else
  {
    printf("cau\n");
    p = (TPrvok*)malloc(sizeof(TPrvok));
    p->hodnota = getchar();
    p->dalsi = NULL;
    (*k)->dalsi = p;
    *k = p;
  }
}

void vypis(TPrvok *p)
{
  while (p != NULL)
  {
    printf("prvok : %c\n", p->hodnota);
    p = p->dalsi;
  }
}

int main()
{
  z = k = NULL;
  for (int i = 0; i < 5; i++) pridaj (&z, &k);
  vypis(z);
  return EXIT_SUCCESS;
}


Offline

Skúsený užívateľ
Skúsený užívateľ
C linearne viazany zoznam

Registrovaný: 11.01.09
Prihlásený: 29.03.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 11.12.2011 20:22

Pretoze po volani getchar() ti ostane vo vstupnom buffri stdin znak enter. Zadas znak a stlacis enter. Ten enter sa vrati pri dalsom volani getchar a ulozi sa vlastne do dalsieho zaznamu. Zadas napr toto:
Kód:
a [enter]
b [ enter]
c [enter]
.......
prvy prvok = a
druhy prvok = [enter]
treti prvok = b
stvrty prvok = [enter]
piaty prvok = c


Aby si to obisla, tak potrebujes vyprazdnit vstupny buffer po kazom volani getchar(). Mozes si do kodu pridat nasledujucu funkciu:
Kód:
void flush_stdin()
{

    int c;
    while ( ( c = getchar() ) != '\n' && c != EOF );

}


A vo svojom kode iba pridaj jej volanie:
Kód:
void pridaj(TPrvok **z, TPrvok **k)
{
  TPrvok *p;
  if (*z == NULL)
  {
    printf("ahoj\n");
    *z = (TPrvok*)malloc(sizeof(TPrvok));
    (*z)->hodnota = getchar();
    flush_stdin();        /* tuna vloz volanie funkcie */
    (*z)->dalsi = NULL;
    *k = *z;
  }
  else
  {
    printf("cau\n");
    p = (TPrvok*)malloc(sizeof(TPrvok));
    p->hodnota = getchar();
    flush_stdin();        /* tuna vloz volanie funkcie */
    p->dalsi = NULL;
    (*k)->dalsi = p;
    *k = p;
  }
}


Offline

Užívateľ
Užívateľ
C linearne viazany zoznam

Registrovaný: 15.10.11
Prihlásený: 07.03.12
Príspevky: 13
Témy: 6
Príspevok Napísal autor témyOffline : 11.12.2011 21:39

Dakujem opat... Mam tu dalsiu vec, ja proste nie som schopna tie problemy vyriesit... Tu uz mam nacitavanie cez terminal a vypis do suboru, tak to funguje. Lenze tie slova by sa nemali zadavat do terminalu, ale precitat zo suboru...
Kód:
typedef struct {
  wchar_t slovo[30];
} tdata;

typedef struct item titem;

struct item {
  tdata data;
  titem *next;
};

typedef struct {
  titem *head;
  titem *tail;
} tlist;

void listInit(tlist *list)
{
  list->head = NULL;
  list->tail = NULL;
  return;
}

int read(tdata *slovo, char *argv[])
{
  FILE *f;
  f = fopen(argv[1], "r");
 
  if (f == NULL)
  { return EXIT_FAILURE; }
  // nacitavanie cez terminal, ale takto : int i = fwscanf(f, L"%ls", slovo->slovo); to nefunguje :(
  int i = wscanf(L"%ls", slovo->slovo);
 
  if (i != 1 && i != EOF)
    return EXIT_FAILURE;
  return i;
}

void insertFirst(tlist *list, tdata d)
{
  titem *newItem;
  if ((newItem = malloc(sizeof(titem))) == NULL)
    return EXIT_FAILURE;
  newItem->data = d;
  newItem->next = list->head;
  list->head = newItem;
  return;
}

void readList(tlist *list, char *argv[])
{
  tdata tmp;
  while (read(&tmp, argv) != EOF)
    insertFirst(list, tmp);
  return;
}

int writeList (const tlist *list, char *argv[])
{
  FILE *f2;
  f2 = fopen(argv[2], "w");
  if (f2 == NULL)
    return EXIT_FAILURE;
 
  for (titem *tmp = list->head; tmp != NULL; tmp = tmp->next)
    fwprintf(f2, L"%ls\n", tmp->data.slovo);
  return EXIT_SUCCESS;
}

int main(int argc, char *argv[])
{
  setlocale(LC_CTYPE, NULL);
  tlist list;
  listInit (&list);
  readList(&list, argv);
  writeList(&list, argv);
  return EXIT_SUCCESS;
}


Offline

Skúsený užívateľ
Skúsený užívateľ
C linearne viazany zoznam

Registrovaný: 11.01.09
Prihlásený: 29.03.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 11.12.2011 22:39

1. chyba:
Kód:
f = fopen(argv[1], "r");

zmenit na:
Kód:
f = fopen(argv[1], "rb");


2. chyba:
Vo funkcii read je hned na zaciatku toto:
Kód:
  FILE *f;
  f = fopen(argv[1], "r");

Tzn, kazdy vstup sa subor nanovo otvori a zabudne sa pozicia, kde sa citat dalej. Je nutne umiestnit toto otverenie suboru mimo funkciu. Nebudem ti vraviet kde, kedze celu funkciu si tomu prisposobovala, skus sa s tym pohrat, kde umiestnit otvaranie, aby to vyhovovalo tvojmu kodu. Len davaj pozor, aby to nebolo v slucke, ako teraz ( lebo cela funkcia sa nachadza v slucke while ).

3. chyba:
Este stale vo funkcii read, zmen tento riadok ( EXIT_FAILURE je definovana ako 1, nie 0, na to pozor ):
Kód:
if (i != 1 && i != EOF)
  return EXIT_FAILURE;

na:
Kód:
if (i != 1 || i == EOF)
  return 0;


4. chyba:
Ta sa sice nemusi nijako prejavit, ale neuzatvaras otvorene subory funkciou fclose. Po kazdej skoncenej praci so subormi by sa mali korektne zatvorit. Ak sa to nespravi, tak potom pri nasledovnej praci sa program moze spravat divoko.



// EDIT

A este som zabudol, kedze v tretej chybe som ti zmenil navratovu hodnotu, tak potom este uprav cyklus vo funkcii readList:
Kód:
while (read(&tmp, argv) != EOF)

na:
Kód:
while (read(&tmp, argv) != 0 )


Offline

Užívateľ
Užívateľ
C linearne viazany zoznam

Registrovaný: 15.10.11
Prihlásený: 07.03.12
Príspevky: 13
Témy: 6
Príspevok Napísal autor témyOffline : 11.12.2011 23:18

To otvaranie suboru bol problem... To je taka hlupost, ale samej mi to nedojde, az potom ze no jasneeee... Dakujem, som tvojim vecnym dlznikom. Urcite sa tu este ozvem s niecim dalsim :roll:


Odpovedať na tému [ Príspevkov: 5 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. K akemu hardweru konkretne je viazany OS OEM verzia?

v Operačné systémy Microsoft

3

525

26.01.2011 15:01

alexis333 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoznam

v HTML, XHTML, XML, CSS

17

2921

23.06.2007 22:06

sento Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zoznam

v JavaScript, VBScript, Ajax

1

1836

25.06.2012 0:08

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoznam

v HTML, XHTML, XML, CSS

10

2247

05.08.2007 10:20

HAE07 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zoznam systemov

v Operačné systémy Microsoft

1

529

06.08.2009 23:22

Jaro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zretazeny zoznam

v Assembler, C, C++, Pascal, Java

4

1959

23.02.2011 18:13

mack0 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoznam serverov

v Počítačové hry

23

5766

24.06.2010 15:18

Spard Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoznam moderatorov

v Redakčné systémy

10

903

23.08.2006 19:38

gumy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoznam kontaktov

v Ostatné

3

739

26.10.2010 19:53

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zreťazený zoznam

v Assembler, C, C++, Pascal, Java

3

1076

26.03.2012 17:06

Fico Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. NFS zoznam

v Počítačové hry

6

928

03.10.2011 10:14

dixi Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. problem zoznam

v PHP, ASP

3

553

05.03.2008 10:33

mondzo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zoznam uživateľov

v Redakčné systémy

1

778

21.02.2007 11:20

Freelan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zoznam mail

v Služby a webstránky

0

1078

03.12.2019 20:24

Duso11x Zobrazenie posledných príspevkov

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie. Zoznam katalógov

v Internetový marketing, SEO, reklama

9

73049

30.12.2010 9:51

JanoF Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Python zoznam

v Perl, Python, Ruby, CGI

1

677

14.06.2013 21:35

reDo Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra