C# Konzol App probléma (bővebben lent)

C# Konzol App probléma (bővebben lent)
2018-08-16T12:24:01+02:00
2018-08-16T20:05:27+02:00
2022-10-15T21:31:02+02:00
UltimateGold
Úgy érzem, nem tudom befolyásolni a Konzol App működését. Amikor beírom pl., hogy /b egg 10 , akkor hozzáad 10 et az egg értékéhez, de nem fut bele abba a feltételbe, hogy ha a  sbemenet tartalmazza az "egg " stringet, akkor mit csináljon vele (pedig abban van benne, hogy adjon hozzá annyit  et az egg értékéhez amennyit beírunk ). Ugyan ez van akkor, ha beírom, hogy sugar, vagy hogy flour, csak akkor nem az egghez ad hozzá annyit amennyit beírok, hanem a sugar hez, vagy a flor hoz. Ha olyat írok be, ami nem tartalmazza se az "egg " se a "sugar " és se a "flour " stringrészleteket, akkor viszont belefut abba a lehetőségbe amikor nincsenek ezek benne a sbemenetben, és kíírja , hogy "Sajnos ez a parancs nem felel meg a vásárlási protokollnak! Kérem próbálkozzon újra!" (amit kell). Vajon mit ronthattam el?
Az errre a kérdésre vonatkozó forráskódrészlet:  if (bemenet == "/shop") {
if (bemenet == "/shop") { Console.WriteLine("Mit széretnél venni?"); Console.WriteLine("Liszt (/b flour) - 1 zsák liszt ára 1$"); Console.WriteLine("Tojás (/b egg) - 1 doboz tojás ára 2$"); Console.WriteLine("Cukor (/b sugar) - 1 zsák cukor ára 3$"); Console.WriteLine(""); //shop = true; sbemenet = Console.ReadLine(); stat = 2; while (stat == 2) { if (sbemenet.Contains("flour ")) { var parts = sbemenet.Split(' '); flour += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " zsák lesztet!"); stat = 1; StreamWrite(); } if (sbemenet.Contains("egg ")) { var parts = sbemenet.Split(' '); egg += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " doboz tojást"); stat = 1; StreamWrite(); } if (sbemenet.Contains("sugar ")) { var parts = sbemenet.Split(' '); sugar += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " zsák cukrot!"); stat = 1; StreamWrite(); } else { Console.WriteLine("Sajnos ez a parancs nem felel meg a vásárlási protkollnak! Kérem próbálkozzon újra!"); sbemenet = Console.ReadLine(); } } }
A sript teljes forráskódja:

using System; using System.IO; using System.Timers; namespace CookieClicker { class Program { static int factory = 0; static int factoryLevel = 1; static int factoryprogress = 0; static int money = 0; static int cookie = 0; static int integer = 0; static int flour = 20; static int egg = 10; static int sugar = 6; static int cookerLevel = 1; static string bemenet = ""; static string bemenet2 = ""; static string sbemenet = ""; static string t = t; static bool alapanyag = true; static bool alapanyag2 = true; static bool shop = false; static int stat = 0; static void StreamWrite() { using (StreamWriter sw = new StreamWriter("output.txt")) { sw.WriteLine(stat.ToString()); sw.WriteLine(money.ToString()); sw.WriteLine(cookie.ToString()); sw.WriteLine(factory.ToString()); sw.WriteLine(factoryLevel.ToString()); sw.WriteLine(cookerLevel.ToString()); sw.WriteLine(flour.ToString()); sw.WriteLine(egg.ToString()); sw.WriteLine(sugar.ToString()); } } static void Main(string[] args) { Timer timer = new Timer(1000); timer.Elapsed += async (sender, e) => Update(); timer.Start(); Console.Title = "CookerTycoon"; using (StreamReader sw = new StreamReader("output.txt")) // beolvassa a játékos elmentett adatait { stat = Convert.ToInt32(sw.ReadLine()); money = Convert.ToInt32(sw.ReadLine()); cookie = Convert.ToInt32(sw.ReadLine()); factory = Convert.ToInt32(sw.ReadLine()); factoryLevel = Convert.ToInt32(sw.ReadLine()); cookerLevel = Convert.ToInt32(sw.ReadLine()); flour = Convert.ToInt32(sw.ReadLine()); egg = Convert.ToInt32(sw.ReadLine()); sugar = Convert.ToInt32(sw.ReadLine()); } // // while (true) { if (stat == 0) { Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine("Köszöntelek a játékban! Használd a cook parancsot a sütéshez ( A parancsokat írd be a konzolba). "); Console.WriteLine("A sütshez sajnos alapanyagok is kellenek."); Console.WriteLine(" Használd a /inv parancsot a sütéshez szükséges és a raktáron lévő összetevők listájának eléréséért."); Console.WriteLine("Ha valami gondod akadna, használd a /help parancsot, vagy a /guide parancsot ennek a játékleírásnak az eléréséhez."); Console.WriteLine("Ha elég ügyes vagy és sokat gyűjtessz fejleszteheted a vállalkozásodat."); Console.WriteLine("A rendelkezésedre álló süteményeid számát a /clist parancs segítségével tekintheted meg"); Console.WriteLine("Ha összegyűlt 5 rekesz süteményed, eladhatód őket a /sell parancs beírásával"); Console.WriteLine(" Egyenleged a /m parancs segítségével tudod elérni."); Console.WriteLine("A pénzedből vehetsz összetevőket és gyárakat, fejleszteheted szakácsaid és gyáraid szintjét"); Console.WriteLine("Fejleszd szakácsaid szintjét, vegyél gyárakat, és legyél Te a leggazdagabb süteménysütő!"); Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.White; stat = 1; StreamWrite(); } Console.ForegroundColor = ConsoleColor.Yellow; bemenet = Console.ReadLine(); Console.ForegroundColor = ConsoleColor.White; if (bemenet != "" && bemenet != "/help" && bemenet != "/guide" && bemenet != "nem" && bemenet != "igen" && bemenet != "/c" && bemenet != "/bal" && bemenet != "/money" && bemenet != "/shop" && bemenet != "/b flour" && bemenet != "/b egg" && bemenet != "/b sugar" && bemenet != "/inv" && bemenet != "/ucooker" && bemenet != "//clear progress" && bemenet != "/hack" && bemenet != "cook" && bemenet != "/sell" && bemenet != "/bfac" && bemenet != "/ufac" && bemenet != "/fac" && bemenet != "/m" && bemenet != "/cl") { Console.WriteLine("Ismeretlen parancs"); Console.WriteLine("Használd a /help parancsot a parancsok listájáért!"); Console.WriteLine(""); } if (bemenet == "/help") { Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("cook - süti sütése"); Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("/sell - sütik eladása (egyszerre 5 sütit tudsz eladni)"); Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("/m - egyenleg megtekintése"); Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine("/cl - süteményraktár megtekintése"); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("/fac - gyárlista és részletes gyáradatok megtekintése"); Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("/bfac - gyár vásárlása (egy gyár ára 100 $)"); Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("/ufac - gyárak fejlesztése (a gyárak fejlesztése 500 $)"); Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("//clear progress - játékmenet visszaállítása alapértelmezettre"); Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("/hack - 10000 $ hozzáadása a számlához"); Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine("/ucooker - szakácsok fejlesztése (a szakácsok fejlesztése 20 $)"); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("/inv - raktáron lévő összetevők listája"); Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine("/shop - bolt meglátogatása összetevők vásárlásáért"); Console.ForegroundColor = ConsoleColor.DarkCyan; Console.WriteLine("/c - képernyő tisztítása"); Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("/guide - játék leírása"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine(""); } if (bemenet == "/guide") { Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine("Köszöntelek a játékban! Használd a cook parancsot a sütéshez ( A parancsokat írd be a konzolba). "); Console.WriteLine("A sütshez sajnos alapanyagok is kellenek."); Console.WriteLine(" Használd a /inv parancsot a sütéshez szükséges és a raktáron lévő összetevők listájának eléréséért."); Console.WriteLine("Ha valami gondod akadna, használd a /help parancsot, vagy a /guide parancsot ennek a játékleírásnak az eléréséhez."); Console.WriteLine("Ha elég ügyes vagy és sokat gyűjtessz fejleszteheted a vállalkozásodat."); Console.WriteLine("A rendelkezésedre álló süteményeid számát a /clist parancs segítségével tekintheted meg"); Console.WriteLine("Ha összegyűlt 5 rekesz süteményed, eladhatód őket a /sell parancs beírásával"); Console.WriteLine(" Egyenleged a /m parancs segítségével tudod elérni."); Console.WriteLine("A pénzedből vehetsz összetevőket és gyárakat, fejleszteheted szakácsaid és gyáraid szintjét"); Console.WriteLine("Fejleszd szakácsaid szintjét, vegyél gyárakat, és legyél Te a leggazdagabb süteménysütő!"); Console.WriteLine(""); Console.ForegroundColor = ConsoleColor.White; stat = 1; } if (bemenet == "//clear progress") { using (StreamWriter sw = new StreamWriter("output.txt")) { sw.WriteLine(0.ToString()); sw.WriteLine(0.ToString()); sw.WriteLine(0.ToString()); sw.WriteLine(1.ToString()); sw.WriteLine(1.ToString()); sw.WriteLine(20.ToString()); sw.WriteLine(10.ToString()); sw.WriteLine(6.ToString()); } cookie = 0; money = 0; factory = 0; factoryLevel = 1; flour = 20; egg = 10; sugar = 6; cookerLevel = 1; Console.WriteLine("A játékmeneted sikeresen vissza lett állítva az alapértelmezettre"); } if (bemenet == "/c") { Console.Clear(); } if (bemenet == "/hack") { money += 1000; Console.WriteLine("A számlád egyenlege frissítve: " + money + "$ re!"); Console.WriteLine(""); StreamWrite(); } if (bemenet == "cook") { if (flour > 2 && egg > 1 && sugar > 0) { flour -= 3; egg -= 2; sugar -= 1; cookie = cookie + cookerLevel; Console.WriteLine("Sütöttél egy rekesz sütit! Jelenleg ennyi rekesz süti áll a rendelkezésedre: " + Convert.ToString(cookie)); } if (flour < 3) { Console.WriteLine("Sajnos nincs elég liszted a sütéshez!"); } if (egg < 2) { Console.WriteLine("Sajnos nincs elég tojásod a sütéshez!"); } if (sugar < 1) { Console.WriteLine("Sajnos nincs elég cukrod a sütéshez!"); } Console.WriteLine(""); StreamWrite(); } if (bemenet == "/inv") { Console.WriteLine("Raktáron lévő összetevők listája"); Console.WriteLine("Liszt: " + flour); Console.WriteLine("Tojás: " + egg); Console.WriteLine("Cukor: " + sugar); Console.WriteLine("Egy rekesz süti elkészítéséhez 3 zsák liszt, 2 doboz tojás és 1 zsák cukor szükséges"); Console.WriteLine(""); } if (bemenet == "/shop") { Console.WriteLine("Mit széretnél venni?"); Console.WriteLine("Liszt (/b flour) - 1 zsák liszt ára 1$"); Console.WriteLine("Tojás (/b egg) - 1 doboz tojás ára 2$"); Console.WriteLine("Cukor (/b sugar) - 1 zsák cukor ára 3$"); Console.WriteLine(""); //shop = true; sbemenet = Console.ReadLine(); stat = 2; while (stat == 2) { if (sbemenet.Contains("flour ")) { var parts = sbemenet.Split(' '); flour += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " zsák lesztet!"); stat = 1; StreamWrite(); } if (sbemenet.Contains("egg ")) { var parts = sbemenet.Split(' '); egg += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " doboz tojást"); stat = 1; StreamWrite(); } if (sbemenet.Contains("sugar ")) { var parts = sbemenet.Split(' '); sugar += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " zsák cukrot!"); stat = 1; StreamWrite(); } else { Console.WriteLine("Sajnos ez a parancs nem felel meg a vásárlási protkollnak! Kérem próbálkozzon újra!"); sbemenet = Console.ReadLine(); } } } if (bemenet == "/b flour") { if (shop == true) { Console.WriteLine("Hány zsák lisztet szeretnél venni?"); bemenet2 = Console.ReadLine(); if (int.TryParse(bemenet2, out integer) && money > Convert.ToInt32(bemenet2) - 1) { money -= Convert.ToInt32(bemenet2); flour += Convert.ToInt32(bemenet2); Console.WriteLine("Sikeresen vásároltál " + bemenet2 + " zsák lisztet!"); } else if (int.TryParse(bemenet2, out integer)) { Console.WriteLine("Sajnos nincs elég pénzed " + bemenet2 + " zsák liszt megvásárlására. Egy zsák liszt ára 1 $"); } bemenet2 = ""; flour = flour - 0; StreamWrite(); Console.WriteLine(""); shop = false; } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Sajnos a vásárláshoz el kell menned a boltba"); Console.ForegroundColor = ConsoleColor.White; } } if (bemenet == "/b egg") { if (shop == true) { Console.WriteLine("Hány doboz tojást szeretnél venni?"); bemenet2 = Console.ReadLine(); if (int.TryParse(bemenet2, out integer) && money > Convert.ToInt32(bemenet2) - 1 * 2 + 1) { money -= Convert.ToInt32(bemenet2) * 2; egg += Convert.ToInt32(bemenet2); Console.WriteLine("Sikeresen vásároltál " + bemenet2 + " doboz tojást!"); } else if (int.TryParse(bemenet2, out integer)) { Console.WriteLine("Sajnos nincs elég pénzed " + bemenet2 + " doboz tojás megvásárlására. Egy doboz tojás ára 2 $"); } bemenet2 = ""; egg -= 0; shop = false; StreamWrite(); Console.WriteLine(""); } else { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Sajnos a vásárláshoz el kell menned a boltba"); Console.ForegroundColor = ConsoleColor.White; } } if (bemenet == "/b sugar") { if (shop == true) { Console.WriteLine("Hány zsák cukrot szeretnél venni?"); bemenet2 = Console.ReadLine(); if (int.TryParse(bemenet2, out integer) && money > Convert.ToInt32(bemenet2) - 1 * 3 + 2 && shop == true) { money -= Convert.ToInt32(bemenet2) * 2; sugar += Convert.ToInt32(bemenet2); Console.WriteLine("Sikeresen vásároltál " + bemenet2 + " zsák cukrot!"); bemenet2 = ""; } else if (int.TryParse(bemenet2, out integer)) { Console.WriteLine("Sajnos nincs elég pénzed " + bemenet2 + " zsák cukor megvásárlására. Egy zsák cukor ára 3 $"); } sugar = sugar - 0; StreamWrite(); Console.WriteLine(""); } else { Console.ForegroundColor = ConsoleColor.Red; Conso
Mutasd a teljes hozzászólást!
akikarinak igaza van probáld ki úgy vagyis így:
Mert ahogy te csináltad ott csak az utolsó elágazásnál van csak else.
Ha te az összeset if-fel akarod csinálni akkor bizony minden if után kell egy else ág.
De ez if,else if,stb gyorsabb és jobb is.
Ha a hibás programban kiprobálod akkor a /shop után a /b sugar 2 nél nem írja ki,de a többinél ki írná.
Itt a javitott (if helyett ->else if) 

while (stat == 2) { if (sbemenet.Contains("flour ")) { var parts = sbemenet.Split(' '); flour += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " zsák lesztet!"); stat = 1; StreamWrite(); } else if (sbemenet.Contains("egg ")) { var parts = sbemenet.Split(' '); egg += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " doboz tojást"); stat = 1; StreamWrite(); } else if (sbemenet.Contains("sugar ")) { var parts = sbemenet.Split(' '); sugar += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " zsák cukrot!"); stat = 1; StreamWrite(); } else { Console.WriteLine("Sajnos ez a parancs nem felel meg a vásárlási protkollnak! Kérem próbálkozzon újra!"); sbemenet = Console.ReadLine(); } }
Mutasd a teljes hozzászólást!

  • Vajon mit ronthattam el?

    Majdnem mindent. A konkrét problémádat egyébként valószínűleg az okozza, hogy ha nem cukrot vásárolsz, akkor az utolsó else ágra fut a vezérlés, ami kiírja az említett szöveget.

    else if-et kellene használnod az első if kivételével mindegyik helyett a while (stat == 2) ciklusban.
    Mutasd a teljes hozzászólást!
  • Már próbáltam, és egyébként sem az a hiba, ami akkor lenne ha az else if lenne a probléma, mivel nem vásárol mindenből csak amit megadok neki, viszont egyik if -be sem fut bele a debugger szerint, és nem is teljesíti a többi utasítást.
    Mutasd a teljes hozzászólást!
  • /b egg 2 paranccsal belefut az egg ágba, majd a legvégén az else-be. Szóval az biztosan hiba.
    Mutasd a teljes hozzászólást!
  • akikarinak igaza van probáld ki úgy vagyis így:
    Mert ahogy te csináltad ott csak az utolsó elágazásnál van csak else.
    Ha te az összeset if-fel akarod csinálni akkor bizony minden if után kell egy else ág.
    De ez if,else if,stb gyorsabb és jobb is.
    Ha a hibás programban kiprobálod akkor a /shop után a /b sugar 2 nél nem írja ki,de a többinél ki írná.
    Itt a javitott (if helyett ->else if) 

    while (stat == 2) { if (sbemenet.Contains("flour ")) { var parts = sbemenet.Split(' '); flour += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " zsák lesztet!"); stat = 1; StreamWrite(); } else if (sbemenet.Contains("egg ")) { var parts = sbemenet.Split(' '); egg += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " doboz tojást"); stat = 1; StreamWrite(); } else if (sbemenet.Contains("sugar ")) { var parts = sbemenet.Split(' '); sugar += int.Parse(parts[2]); Console.WriteLine("Sikeresen vásárolt " + parts[2] + " zsák cukrot!"); stat = 1; StreamWrite(); } else { Console.WriteLine("Sajnos ez a parancs nem felel meg a vásárlási protkollnak! Kérem próbálkozzon újra!"); sbemenet = Console.ReadLine(); } }
    Mutasd a teljes hozzászólást!
  • Köszi, nekem nem tudom miért, de valahogy nem ment. Szerintem elgépelhettem valamit.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd