2017-10-23 8 views
0

私はログを保存できる簡単なプログラムを作っています。ForeachループとCでリストをクリアする

誰かが私を助けたいと思うなら、私は本当に感謝する2つの問題があります。

1.私のスイッチのケース4の123行目に書いたプログラムのログを消去する方法はありますか?私は両方のログを試みた。クリア();とArray.Clear(text、0、text.Length);どんな成功もなしに。

  1. 質問は、行109のForeachループに関するものです。「あなたの検索は結果が出ない」と言われたらどうすればいいですか?ユーザーがリストに保存されていないタイトルを検索したとき

私はこのコードを読んでいただければ幸いです。

public class loggProgram 
{ 

    public void Loggbok() 
    { 
     bool isRunning = true; 

     //All the essential code for the List and the Array that the user can save logs into 
     string[] text = new string[2]; 
     text[0] = "title"; 
     text[1] = "post"; 
     List<string> logs = new List<string>(); 

     //A Dictionary for the search option 3 in the switch menu 
     Dictionary<string, string> searchWord = new Dictionary<string, string>(); 

     //While loop with all the user interaction 
     while (isRunning) 

     { 
      //The menu that the user can type 1-5 in order to make a option 
      Console.WriteLine("\n\tWelcome to the logbook.\n\tPlease type a number between 1-5.\n"); 
      Console.WriteLine("\t[1]Create a log to the logbook"); 
      Console.WriteLine("\t[2]Display all the current logs saved"); 
      Console.WriteLine("\t[3]Search the logbook "); 
      Console.WriteLine("\t[4]Erase all logs "); 
      Console.WriteLine("\t[5]Quit "); 
      Console.Write("\tChoose a number: "); 

      //Take userinput & convert into a number with TryParse 
      string MenuOption = Console.ReadLine(); 
      int userNumber; 
      if (int.TryParse(MenuOption, out userNumber)) 
      { 
       Console.WriteLine("\tLoading program... Done!"); 
      } 


      //Take userNumber and let number 1-5 start the switch 

      switch (userNumber) 
      { 

       case 1: 
        { // Save a new log 
         Console.Clear(); 

         //Let the user type a titel to the log 
         Console.Write("Titel: "); 
         text[0] = Console.ReadLine(); 

         //Let the user type a message and then save it to searchWord 
         Console.Write("Message: "); 
         text[1] = Console.ReadLine(); 
         Console.Clear(); 

         searchWord[text[0]] = text[1]; 


         break; 
        } 
       case 2: 
        { 
         //Show all the saved logs with a foreach loop       
         Console.Clear(); 
         Console.WriteLine("This is currently saved in the logbook:\n "); 
         foreach (KeyValuePair<string, string> e in searchWord) 
         { 
          Console.WriteLine("Titel: " + e.Key + "\nText: " + e.Value); 
         } 

         Console.Write("\nPress any key to get back to the main meny.\n"); 
         Console.ReadKey(); 
         Console.Clear(); 
         break; 

        } 

       case 3: 
        { 
         //Search for matching titel with a Dictionary and present a result if a match is found 
         Console.Clear(); 
         Console.WriteLine("Search titel:"); 
         string wordSearch = Console.ReadLine(); 

         //foreach loop that search in the dictionary 
         foreach (KeyValuePair<string, string> word in searchWord) 
         { 
          if (word.Key == wordSearch) 
          { 
           Console.Clear(); 
           Console.Write("Your search yeiled a result!\nThe match is:\n" + "Titel " + word.Key + "\nText " + word.Value); 
           Console.Write("\n\nPress any key to get back to the main meny.\n"); 
          } 

          /* 
          I want to let the user know if nothing was found with a WriteLine output. 
          Right now it always prints out even when the user input is a correct titel, 
          it happens when more then 1 logs is saved so i need to change this 
          so it only prints out when a stirng input is not saved in the list.*/ 
          else if (word.Key != wordSearch) 
          { 
           Console.WriteLine("Your search yeiled no results!"); 
          } 


         } 
         Console.ReadLine(); 
         Console.Clear(); 

         break; 
        } 


       case 4: 
        { 
         //Reset all logs (it does not work so i need help with this one) 
         Console.Clear(); 
         logs.Clear(); 
         Array.Clear(text, 0, text.Length); 
         Console.WriteLine("Erasing all logs... Done."); 
         Console.Write("\n\nPress any key to get back to the main meny.\n"); 
         Console.ReadLine(); 
         Console.Clear(); 

         break; 
        } 
       case 5: 
        { 
         //Closing the app 
         Console.Clear(); 
         Console.WriteLine("Thanks for using the app, goodbye! "); 
         isRunning = false; 
         Console.ReadLine(); 

         break; 
        } 

       default: 
        { 

         // Tell the user to type 1 - 5 
         Console.Clear(); 
         Console.WriteLine("Something went wrong. Choose a number between 1-5."); 
         Console.ReadLine(); 
         Console.Clear(); 

         break; 

        } 
      } 

     } 

    } 



    /* 
     Main method 
     This Run Class creates a new instance so that the loggProgram is being called upon. 
     Then it starts the program in a new instance. 
    */ 

    class Run 
    { 
     static void Main(string[] args) 
     { 
      new loggProgram().Loggbok(); 
     } 
    } 
+0

あなたは '使用しているように見えますlogs.Clear() 'は何もしません。プログラムを簡単にデバッグし、 'logs'が' Clear'の前に空であることを確認することができます。 '2'の場合も見ることができ、' logs'は何も表示されません。 – crashmstr

+0

logs.Clear();あなたのログが本当に作られているかどうかは分かりません。キーワード全体を検索するために、キーワードを手動で検索する必要はありません。searchword.containskey( "xxx")はyesまたはnoと答えます。 – BugFinder

+0

簡単でした。ありがとう! –

答えて

0

1 /ライン123、あなたは単にそれをinitlializingリストにクリアすることができます:

logs = new List<string>(); 

2 /を使用することができ、結果を検索するには:

var found = searchWord.FirstOrDefault(p=>p.Key == myValue); 
if(found != null) 
    Console.Write("found"); 
else 
    Console.Write("Not found"); 
関連する問題