Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Autor | Správa |
---|
Registrovaný: 19.10.10 Prihlásený: 28.10.12 Príspevky: 41 Témy: 9 | 9 |
Zdravim, v subore mam znaky v tvare obdlznika a potreboval by som ich nacitat do dvojrozmerneho pola, pri tejto konstrukcii to funguje:
Kód: int j=0; char pole[20][20]; FILE *f; f = fopen("labyrint.txt", "r"); while(fscanf(f,"%s",pole[j]) != EOF){ j++; }
fclose(f); Problem nastane, ked sa v kode nachadza medzera - v tom pripade to pravdaze neprecita ako retazec... Vedel by mi niekto s tymto pomoct? Rozmyslal som nad niecim takymto: Kód: int j=0; int i = 0; char pole[20][20]; FILE *f; f = fopen("labyrint.txt", "r"); while(fscanf(f,"%c",pole[j]) != EOF){ if(pole[j][i] == "\n"){ j++; i = 0; } i++; }
fclose(f);
Ale toto nefunguje...Neviem, co s tym. Dakujem za pomoc.
|
|
Registrovaný: 11.01.09 Prihlásený: 02.02.25 Príspevky: 1397 Témy: 10 | 10 Bydlisko: Hrinova |
Kód: while(fscanf(f,"%c",pole[j]) != EOF) pole[j] je typu char* a ocakava sa char. Takze nacita sa iba jeden znak. Skusal si to zemnit takto: Kód: while(fscanf(f,"%c",pole[j][i]) != EOF) ? Lebo hned po tom robis kontrolu: pole[j][i] == "\n" Potom si uprav v tomto: Kód: if(pole[j][i] == "\n"){ j++; i = 0; } i++;
i = 0; zmen na i = -1. Lebo hned ako vyjdes z bloku sa inkrementuje i z nuly na jednotku, cize prvy index pola ( lepsie povedane nulty ) bude nevyuzity.
|
|
Registrovaný: 19.10.10 Prihlásený: 28.10.12 Príspevky: 41 Témy: 9 | 9 |
pri
Kód: if(pole[j][i] == "\n")
mi to vyhodi error:
ISO C++ forbids comparison between pointer and integer
|
|
Registrovaný: 11.01.09 Prihlásený: 02.02.25 Príspevky: 1397 Témy: 10 | 10 Bydlisko: Hrinova |
zmen na:
Kód: if(pole[j][i] == '\n')
"\n" - je retazec
'\n' - je znak
_________________ Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS. |
|
Registrovaný: 19.10.10 Prihlásený: 28.10.12 Príspevky: 41 Témy: 9 | 9 |
dakujem, skompilovat to uz ide, lenze ihned po spusteni spadne. V pripade, ze v podmienke cyklu while dam len pole[j] popr. pole, tak to nespadne, ale do pola sa nakopiruje len prvz znak. // pridané po 2 hodinách 36 minútach od posledného príspevkutak som to upravil takto:
Kód: int j = 0; int i = 0;
ifstream f ("labyrint.txt", ifstream::in); char znak;
while(f >> znak){ if(znak == '\n'){ j++; i = -1; } pole[j][i] = znak; i++; }
f.close();
tentokrat to nespadne, ale vobec mi nebere zo suboru medzery...
|
|
Registrovaný: 11.01.09 Prihlásený: 02.02.25 Príspevky: 1397 Témy: 10 | 10 Bydlisko: Hrinova |
Neviem, preco si zrazu presiel na C++ no ale fajn. Uprav si riadok, kde citas znak takto:
Kód: while( f >> noskipws >> znak )
A tento krat mas opat zle indexovanie pola. Takze v tomto priapde uprav i = -1; na i = 0;. Musis si sledovat, aky index ti zacina, ked pracujes s polom.
|
|
Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v PHP, ASP | 4 | 1073 | 13.02.2009 17:55 _fortes_ | | v JavaScript, VBScript, Ajax | 9 | 1138 | 05.03.2008 13:45 stenley | | v HTML, XHTML, XML, CSS | 11 | 827 | 12.12.2010 15:40 evryl | | v PHP, ASP | 6 | 487 | 07.02.2008 21:32 xxxmiroxxx | | v PHP, ASP | 2 | 800 | 20.09.2010 17:06 elo | | v PHP, ASP | 4 | 465 | 25.12.2010 23:44 Blackshadow | | v Assembler, C, C++, Pascal, Java | 5 | 631 | 23.08.2014 21:35 nasm | | v PHP, ASP | 12 | 815 | 28.02.2008 20:58 Tominator | | v Databázy | 6 | 661 | 15.08.2012 19:13 zdeniatqo | | v Assembler, C, C++, Pascal, Java | 2 | 474 | 05.11.2012 20:53 ado130 | | v Assembler, C, C++, Pascal, Java | 3 | 731 | 25.11.2010 15:00 ado21 | | v HTML, XHTML, XML, CSS | 11 | 2467 | 23.02.2020 21:58 JanoF | | v Assembler, C, C++, Pascal, Java | 11 | 539 | 19.05.2016 9:37 Miso122 | | v Assembler, C, C++, Pascal, Java | 6 | 1402 | 31.03.2015 17:47 dany2281995 | | v Assembler, C, C++, Pascal, Java | 4 | 2407 | 05.07.2011 14:53 v.tkac | | v Databázy | 8 | 1503 | 31.10.2008 20:08 El_locco |
|