| | |
| Stránka: 1 z 1
| [ Príspevkov: 5 ] | |
Autor | Správa |
---|
Registrovaný: 15.10.11 Prihlásený: 07.03.12 Príspevky: 13 Témy: 6 | Napísal xyzz: 11.12.2011 17:20 | |
|
Nemozem prist na to, preco mi to preskoci nacitanie druheho a stvrteho prvku
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; }
|
|
Registrovaný: 11.01.09 Prihlásený: 29.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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; } }
|
|
Registrovaný: 15.10.11 Prihlásený: 07.03.12 Príspevky: 13 Témy: 6 | Napísal autor témy xyzz: 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; }
|
|
Registrovaný: 11.01.09 Prihlásený: 29.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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. // EDITA 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 )
|
|
Registrovaný: 15.10.11 Prihlásený: 07.03.12 Príspevky: 13 Témy: 6 | Napísal autor témy xyzz: 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
|
|
| Stránka: 1 z 1
| [ Príspevkov: 5 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| K akemu hardweru konkretne je viazany OS OEM verzia? v Operačné systémy Microsoft | 3 | 525 | 26.01.2011 15:01 alexis333 | | zoznam v HTML, XHTML, XML, CSS | 17 | 2921 | 23.06.2007 22:06 sento | | Zoznam v JavaScript, VBScript, Ajax | 1 | 1836 | 25.06.2012 0:08 shaggy | | zoznam v HTML, XHTML, XML, CSS | 10 | 2247 | 05.08.2007 10:20 HAE07 | | Zoznam systemov v Operačné systémy Microsoft | 1 | 529 | 06.08.2009 23:22 Jaro | | Zretazeny zoznam v Assembler, C, C++, Pascal, Java | 4 | 1959 | 23.02.2011 18:13 mack0 | | zoznam serverov v Počítačové hry | 23 | 5766 | 24.06.2010 15:18 Spard | | zoznam moderatorov v Redakčné systémy | 10 | 903 | 23.08.2006 19:38 gumy | | zoznam kontaktov v Ostatné | 3 | 739 | 26.10.2010 19:53 shaggy | | Zreťazený zoznam v Assembler, C, C++, Pascal, Java | 3 | 1076 | 26.03.2012 17:06 Fico | | NFS zoznam v Počítačové hry | 6 | 928 | 03.10.2011 10:14 dixi | | problem zoznam v PHP, ASP | 3 | 553 | 05.03.2008 10:33 mondzo | | Zoznam uživateľov v Redakčné systémy | 1 | 778 | 21.02.2007 11:20 Freelan | | zoznam mail v Služby a webstránky | 0 | 1078 | 03.12.2019 20:24 Duso11x | | Zoznam katalógov v Internetový marketing, SEO, reklama | 9 | 73049 | 30.12.2010 9:51 JanoF | | Python zoznam v Perl, Python, Ruby, CGI | 1 | 677 | 14.06.2013 21:35 reDo |
| 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
|
|