[C++] Snappa upp kommando argument

Permalänk
Medlem

[C++] Snappa upp kommando argument

EDIT: Löst

Permalänk
Medlem

Har lite svårt att förstå exakt vad det är du vill göra, men men jag chansar på att du vill ha en funktion som tar emot ett visst antal argument, men där ett par av dom argumenten inte är obligatoriska utan då istället får default värden? I så fall funkar det bra att ge dom default värden direkt i huvudet på funktionen:

void function(int a, int b, int c = 5, int d = 3)
{}

int main()
{
function(7, 6);
function(3, 4, 6, 5);
}

Här kommer 'c' och 'd' bli satta till 5 och 3 i första call'et, och 6 och 5 i andra call'et.

Ett annat tips när du ska ha in många argument i en funktion är att använda structs/classes för att lagra det i.

Visa signatur

Intel i7-7700k @ 4.9Ghz - Noctua NH-U12P SE2 - MSI GTX 1070 Armor OC - AsRock Z270 Extreme4 - G.Skill Ripjaws V DDR4 3200MHz CL16 2x8GB - Corsair RM750x 750W - Samsung 970 EVO 500GB - Acer Predator X34 - Silverstone RV02-E - Asus Xonar Essence STX II 7.1 - Mionix Naos 8200 - Corsair Gaming MM400 - Das Keyboard 4 Ultimate MX Brown - Beyerdynamic DT990 Pro 250 Ohm - Antlion ModMic 4.0 Unidirectional

Permalänk
Medlem

Så det är själva inmatningen till ditt program du har problem med? Jag förstår inte riktigt problemet fortfarande dock, du vill kunna skriva in flera argument sepererade av mellanslag som jag förstått det?
Så om du vill kunna skriva typ: monster barney 185 173 163 27 0 75
Och det är det som inte fungerar för dig eller?

Visa signatur

Intel i7-7700k @ 4.9Ghz - Noctua NH-U12P SE2 - MSI GTX 1070 Armor OC - AsRock Z270 Extreme4 - G.Skill Ripjaws V DDR4 3200MHz CL16 2x8GB - Corsair RM750x 750W - Samsung 970 EVO 500GB - Acer Predator X34 - Silverstone RV02-E - Asus Xonar Essence STX II 7.1 - Mionix Naos 8200 - Corsair Gaming MM400 - Das Keyboard 4 Ultimate MX Brown - Beyerdynamic DT990 Pro 250 Ohm - Antlion ModMic 4.0 Unidirectional

Permalänk
Medlem

jaha, då förstår jag!
Så här hade jag typ löst det:

string input = "";
getline(cin, input);

Dom här två raderna skapar ett sträng-objekt och läser sen in en hel rad tecken i denna strängen, tills man trycker enter.

string monsterName = input.substr(0, input.find(' '));
input = input.substr(input.find(' ') + 1);

int posX = atoi(input.substr(0, input.find(' ')).c_str());
input = input.substr(input.find(' ') + 1);

Dom här raderna tar din input sträng, och skapar en ny sub-sträng som bara innehåller en del av strängen, nämligen från första tecknet till och med det tecknet innan den första mellanslaget som hittas. Sen tas den biten du är klar med bort från input-strängen och du kan sen köra vidare. Sen upprepas detta (med en int-convert) i nästa steg. På så sätt har du nu fått ut 2 st argument från din sträng, och detta kan du upprepa hur mycket du vill för hur många argument du vill. Detta kan du även lägga i en loop tex. Och input.find(' ') kommer att returna -1 (tror jag) om den inte hittar något mellanslag i strängen (vilket betyder att du har nått ditt slut, eller rättare sagt att du har ett sista argument kvar i strängen, eftersom det inte är något mellanslag efter det sista argumentet). Angående dina @ och # kan du göra sama sak för dom som ovan genom input.find('@') istället.

Visa signatur

Intel i7-7700k @ 4.9Ghz - Noctua NH-U12P SE2 - MSI GTX 1070 Armor OC - AsRock Z270 Extreme4 - G.Skill Ripjaws V DDR4 3200MHz CL16 2x8GB - Corsair RM750x 750W - Samsung 970 EVO 500GB - Acer Predator X34 - Silverstone RV02-E - Asus Xonar Essence STX II 7.1 - Mionix Naos 8200 - Corsair Gaming MM400 - Das Keyboard 4 Ultimate MX Brown - Beyerdynamic DT990 Pro 250 Ohm - Antlion ModMic 4.0 Unidirectional

Permalänk
Medlem

Som sakt, jag har inte tillräckligt med erfarenhet för att kunna genomföra detta

Permalänk
Medlem

Det du behöver är overloading, alternativt och troligen smidigare är att i stort sett bara jobba med pointers, om du har standard värden på olika saker kan pekarna som default gå dit. Då kan du sedan peka om eller ändra på enbart det specifika du vill utan att behöva göra flera olika funktioner eller massa if/else osv.

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Medlem
Skrivet av Ferrat:

Det du behöver är overloading, alternativt och troligen smidigare är att i stort sett bara jobba med pointers, om du har standard värden på olika saker kan pekarna som default gå dit. Då kan du sedan peka om eller ändra på enbart det specifika du vill utan att behöva göra flera olika funktioner eller massa if/else osv.

Har ingen aning vad du pratar om men okej

Behövs något mer förklaras för att någon ska kunna fullfölja min efterfråga?

Permalänk
Medlem
Skrivet av Rick21:

Har ingen aning vad du pratar om men okej

Behövs något mer förklaras för att någon ska kunna fullfölja min efterfråga?

Då får man väl läsa på lite, du kanske hittar en själ som möjligtvis skapar det du är ute efter med det är väl bättre att följa efter tippsen du fick och försöka läsa sig fram till det för att komma med sin egna lösning?

Finns tusentals sätt att lösa detta.
Getopts är något jag brukar köra med http://www.chemie.fu-berlin.de/chemnet/use/info/libgpp/libgpp...
Annars kan man lösa det med vanliga case satser.

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.