#3 ORION206
aha no ale to je zase uplně jiné zadání než to co si popsal v úvodu
protože pokud je na prvním řádku souboru číslo jen "občas" - což je podle mě blbost
v zadání - mělo by tam být vždy, tak s ohledem na složitost kodu a výslednou přehlednost bych to udělal tak,
že bych otevřel soubor a načetl první řádek (který také musí mít na konci CR+LF) a rozparsoval ho. protože načítáš string mužeš převést string na číslo a pokud vše dopadne dobře znamená to že na prvním řádku je počet všech řádků v souboru - resp. jediné celočíselné číslo. Pokud převod skončí chybou tak tam je souřadnice. Převodní funkce je tady.
http://www.zezula.net/cz/prog/string_na_int.html
to by byla první část programu a výsledkem je hodnota např. bool countValueExists
která muže být true nebo false podle toho jestli počet řádků existuje nebo ne. Na konci této první části soubor uzavřeš příkazem close.
pak bude druhá část, a vstupní hodnotou do této části bude countValueExists. otevřeš soubor a na dalším řádku napíšeš
if ( countValueExists == true ) { // na prvnim radku je uveden pocet radku v souboru
std::getline(ifs, line); // nactes de-fakto nepotrebny prvni radek
}// if
while ( eof - podminka konce souboru ... ) { // nebo přímo řádek načteš
nejake_pole[xx] = std::getline(ifs, line);
}// while
... close file
nejake_pole[xx] značí strukturu kam načtený řádek ukládáš muže to být např pole nebo list z knihovny
http://www.cplusplus.com/reference/list/
já bych si vybral List a vkládal bych ukazatel na sting který obsahuje celý řádek tedy:
x y z odrazivost r g b
takže ten řádek
nejake_pole[xx] = std::getline(ifs, line);
pak musíš nahradit příkazy
String* item = new String; a podobně protože List očekává ukazatel
tady to je napsaný s příkladem
http://stackoverflow.com/questions/3726586/easily-initialise-an-stdlist-of-stdstrings
mužeš ale použít aj vector je to fuk
no takže nyní máš načtené řádky v paměti a víš kolik jich je a teď je rozparsuješ
takže potřebuješ 2 cykly for:
for ( i = od řádku 0 do max-1) { // cyklus projde vsechny nalezene radky
line = List[i];
tady vložíš kod pro nalezení pozice první mezery a extrahuješ text až po první mezeru
atd... až k poslednímu místu
tady je příklad
http://www.cplusplus.com/…string/find/
až najdeš první mezeru dáš
line = line od pozice první mezery + 1 do konce
a to samý pro číslo na druhý pozici, prostě pokaždé si odřízneš kousek z i-tého řádku odzačátku
a ta odříznutá část je řetězec a ten převedeš funkcí atoi a pak si ho někam schováš
http://stackoverflow.com/…ing-to-int-c
Moje_Struktura item = new Moje_Struktura();
item->x = první extrahované číslo
.....atd
item->b = posledni extrahovane cislo
List muj_List.PushBack(item)
}// for
ideální pro schování x y z odrazivost r g b je struktura, pro kterou alokuješ paměť příkazem NEW
v každém cyklu for ( i = od řádku 0 do max-1) což je logické
pro uložení množiny struktur zvolíš List - ale mužeš i array nebo vector, ale list je asi nejlepší...
struct Moje_Struktura {
double x;
double y;
....
double b;
}
no a to je všecho .. je to zajímavý zadání ...