Vinnaren i pepparkakshustävlingen!
2018-01-30, 12:48
  #1
Medlem
Hej
Har en uppgift som jag har fastnat lite på. Det är nämligen så att While - loopen inte fungerar som den ska och har försökt att leka med den men antingen så stängs programmet av efter case 1 eller så körs det resten av case om och om igen. Är det något jag gör fel eller saknar jag något?

Kod:
namespace Menu
{
    class Program
    {
        static void Main()
        {
            string[] test = new string[5];
            MainMenu();
            int menuoption;
            Int32.TryParse(Console.ReadLine(), out menuoption);
            string userInput;

            while (menuoption <= 5)
            switch (menuoption)
            {
                case 1:
                    for (int i = 0; i < 5; i++)
                    {
                        Console.Write("Write the word you want add: ");
                        test[i] = Console.ReadLine();
                            menuoption++;
                    }
                   
                    break;
                case 2:
                    {
                 Console.WriteLine("Following words exists : \n\n{0} \n{1} \n{2} \n{3} \n{4} ", test[0], test[1], test[2], test[3], test[4]);
                    }
                    break;
                case 3:
                    {
                        Console.WriteLine("Write one word to add: ");
                        userInput = Console.ReadLine();
                        Console.WriteLine("Following word: " + userInput + " has been added");
                           
                    }
                    break;
                case 4:
                    Console.Write("Write the word you are searching for: ");

                    string sök = Console.ReadLine();
                    bool flag = false;
                    for (int i = 0; i < 5; i++)
                    {
                        if (test[i] == sök)
                        {
                            flag = true;
                        }
                    }
                    if (flag)
                    {
                        Console.WriteLine("Following word has been found:" + sök);
                    }
                    break;
                case 5:
                    Console.WriteLine("Press 'Enter' to exit' ");
                    Console.ReadLine();
                    Environment.Exit(0);
                  
                    break;

                default: // 
                    Console.Write("\nWrong input, please try again");
                    break;
            }
            MainMenu();
        }

        private static bool MainMenu()
        {
            Console.WriteLine("\n\n[1]Add five words to the list");
            Console.WriteLine("[2] View all words");
            Console.WriteLine("[3] Add one word ");
            Console.WriteLine("[4] Search ");
            Console.WriteLine("[5] Quit");
            Console.Write("\nChoose:");
           return true;
        }

    }
}
__________________
Senast redigerad av Aghani 2018-01-30 kl. 13:35.
Citera
2018-01-30, 13:25
  #2
Medlem
kodsnickrarns avatar
Nu verkar det saknas lite kod i ditt exempel, kanske blev fel vid klipp&klistringen där.
While-raden ser konstig ut och kompilerar inte som den ser ut:

Kod:
while (menuoption <= 
switch (menuoption)

Nu antar jag att det skulle se ut såhär nånting:

Kod:
while (menuoption <= 4) 
{
  switch() 
  {
    ...
  }
  ...
  MainMenu();
}

Men, felet är att du aldrig läser in något nytt menyalternativ _inne_ i whileloopen med följd att
den kommer snurra runt om och om igen i all evighet..

/K
Citera
2018-01-30, 13:39
  #3
Medlem
Citat:
Ursprungligen postat av kodsnickrarn
Nu verkar det saknas lite kod i ditt exempel, kanske blev fel vid klipp&klistringen där.
While-raden ser konstig ut och kompilerar inte som den ser ut:

Kod:
while (menuoption <= 
switch (menuoption)

Nu antar jag att det skulle se ut såhär nånting:

Kod:
while (menuoption <= 4) 
{
  switch() 
  {
    ...
  }
  ...
  MainMenu();
}

Men, felet är att du aldrig läser in något nytt menyalternativ _inne_ i whileloopen med följd att
den kommer snurra runt om och om igen i all evighet..

/K

Ja, precis , det ska stå while(menuoption <= 5 ),

Så om jag har förstått det rätt så ska switch-satsen ligga inuti while- loop? Då jag ska väl lägga till curly braces mellan dem eller?
Citera
2018-01-30, 13:57
  #4
Medlem
kodsnickrarns avatar
Citat:
Ursprungligen postat av Aghani
Ja, precis , det ska stå while(menuoption <= 5 ),

Så om jag har förstått det rätt så ska switch-satsen ligga inuti while- loop? Då jag ska väl lägga till curly braces mellan dem eller?

Ja det är klart lämpligt :-)

Du ska också lägga in inläsningen av "menuoption" inne i while-loopen, annars kommer du bara läsa in t.ex. "2" en gång (före while-loopen) och sedan loopa runt, runt, runt med samma menuoption tills du avbryter programmet med Ctrl-C.

Ett tips är att börja använda debuggern i VisualStudio, den är fantastisk, och stega dig igenom ditt program rad för rad så blir det alldeles uppenbart vad det är som händer.

Nästa steg kanske vore att flytta ner inläsningen av menyvalet till sist i funktionen MainMenu och sedan låta den returner värdet...

/K
Citera
2018-01-30, 14:04
  #5
Medlem
Citat:
Ursprungligen postat av kodsnickrarn
Ja det är klart lämpligt :-)

Du ska också lägga in inläsningen av "menuoption" inne i while-loopen, annars kommer du bara läsa in t.ex. "2" en gång (före while-loopen) och sedan loopa runt, runt, runt med samma menuoption tills du avbryter programmet med Ctrl-C.

Ett tips är att börja använda debuggern i VisualStudio, den är fantastisk, och stega dig igenom ditt program rad för rad så blir det alldeles uppenbart vad det är som händer.

Nästa steg kanske vore att flytta ner inläsningen av menyvalet till sist i funktionen MainMenu och sedan låta den returner värdet...

/K


Tack för hjälpen, att det kunde vara en så liten sak som störde mig väldigt mycket. Programmet kan nu köras i while loop och finns inget som loopar flera gånger efter varandra.
Återigen vill jag tack dig för hjälpen.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback