Kezdőoldal » Számítástechnika » Programozás » Hogyan tudok C++ olyan WriteLi...

Hogyan tudok C++ olyan WriteLine parancsot csinálni, hogy az alábbi módon működjön?

Figyelt kérdés

int i = 10;

string s = "értéke"


WriteLine("Az i %1 jelenleg %2", s, i); //kimenet: Az i értéke jelenleg 10


Ami még lényeges lenne ha rosszul van sorszámozva (%1 ... %3) akkor hibát dobjon. Ha kevesebb érték van átadva neki mint amennyi kellene akkor is.



#programozás #C++ #writeline
2015. aug. 31. 21:37
 1/7 anonim ***** válasza:
C++-ban sehogy, amennyire én ismerem a nyelvet. Mégpedig azért nem, mert egy nagyon fontos információ hiányozni fog, mégpedig az, hogy milyen típusú adat az, amit a formátumkód helyére be kellene illesztened. Éppen ezért nem fogod tudni, hogy az adott helyre egy számot/szöveget/stb. kell beillesztened.
2015. aug. 31. 21:45
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

printf nem jó? [link]


Vagy ha gyakorlásképp te akarod megírni, akkor én mondjuk úgy indulnék neki, hogy % jelenként felvágnám (split/explode) a szöveget. Az 1. darabot betenném egy új szövegbe, majd a 2. darabtól kezdve megnézném, mi az első karakter. Itt ellenőrizni tudom a számot, hogy megfelelő-e. Ha megfelelő, akkor hozzáfűzöm a megfelelő változót az új szöveghez, majd az aktuális darabot is, az első karaktere nélkül. És így tovább, végig a darabokon. Végül kiírnám az új szöveget.


Hogy a változó számú paramétert hogy lehet C++-ban megcsinálni, azt rád, a guglira, vagy az alám kommentelő kollégára hagynám.

2015. aug. 31. 21:46
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
És mi a kérdés?
2015. aug. 31. 21:57
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

Ajánlom mindenki figyelmébe aki szerint nem lehetséges vagy elveszik a típusinformáció. Nem pontosan az amit a kérdező kérdez, de elég hasznos hozzá.


https://www.youtube.com/watch?v=_zgq6_zFNGY&t=22m55s

2015. aug. 31. 22:37
Hasznos számodra ez a válasz?
 5/7 A kérdező kommentje:

A probléma részét a hibaellenőrzés képzi, a kiíratással nincs probléma. Mivel rekurzívan írom ki, így azon a funkción belül nem tudom ellenőrizni. Legalábbis olyan módon, hogy az thread-safe legyen. A kiíratás az alábbi módon néz ki, ehhez kellene a hibaellenőrzés.


Jelenleg megpróbálkozok azzal, hogy ennek a tetejére építek egy funkciót ami ha hibát talál feldobja, ha nem akkor pedig meghívja az eredeti funkciót hadd csinálja a dolgát.


void WriteLine(const char* format)

{

std::cout << format << '\n';

}


template<typename T, typename... Args>

void WriteLine(const char* format, const T& value, Args&&... args)

{

for(; *format != '\0'; ++format)

{

if('%' == *format)

{

std::cout << value;

return WriteLine(++format, std::forward<Args>(args)...);

}

std::cout << *format;

}

}


int main(int argc, char *argv[])

{

std::locale::global(std::locale{"hu-HU"});


std::string s = "értéke";

int i = 10;


WriteLine("Az i % jelenleg %, duplája: %", s, i, i + i);


std::getchar();

return 0;

}

2015. aug. 31. 23:04
 6/7 A kérdező kommentje:

Sikerült megoldani az alábbi módszerrel.


"Jelenleg megpróbálkozok azzal, hogy ennek a tetejére építek egy funkciót ami ha hibát talál feldobja, ha nem akkor pedig meghívja az eredeti funkciót hadd csinálja a dolgát."

2015. aug. 31. 23:55
 7/7 A kérdező kommentje:

#2


Elsődleges szempont egy printf gyorsaságával egyenértékű, jobb printf volt a cél. Ez alatt azt értem, hogy nem kell megadni milyen adatot fog kapni, mert bármire működik aminek van << operátora.


Debug módban futás közben ellenőrzi a formátumot, ha pedig nincs ellenőrzés, a printf -el azonos sebességű.

2015. szept. 1. 12:09

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!