2015-09-02 4 views
3

Я не могу понять, как читать пользовательский ввод в цикле (с Console.ReadLine). Я пытаюсь создать заметку, которая позволяет мне хранить то, что когда-либо вводит пользователь, и выходит, если он выводит exit.Как петля Console.ReadLine?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      Note myNote = new Note(); 
      Note otherNote = new Note(); 
      myNote.addText("Hi there"); 
      Console.WriteLine(myNote.display()); 
      otherNote.addText(Console.ReadLine()); 
      Console.WriteLine(otherNote.display()); 
      if (otherNote = "exit") 
      { 

      } 

     } 
    } 


} 


    class Note 
{ 
    private string text = ""; 
    private DateTime timeStamp = DateTime.Now; 
    private DateTime modifiedStamp = DateTime.Now; 
    int maxLength = 10; 


    public void addText(string sometext) 
    { 
     if (text.Length + sometext.Length < maxLength) 
     { 
      text += sometext; 
      modifiedStamp = DateTime.Now; 
     } 

    } 

    public string display() 
    { 
     return "Created: " + timeStamp.ToString() + "\n" + 
      "Modified: " + modifiedStamp.ToString() + "\n" + 
      "Content: " + text; 
    } 
} 
+1

Вставьте свой код в VS перед публикацией. Он будет отформатировать ваш код по мере того, как я отредактировал. – Eser

+0

Чтобы уточнить, вы хотите закодировать запись, чтобы пользователь мог вводить примечания до тех пор, пока он не выберет exit? Таким образом, пользователь может ввести 0 заметок, 1, 2 или 99 или n заметок? – Mystra007

+0

Что VS? Извините, новичок на этом сайте .. –

ответ

6

Вам нужен Список заметок, чтобы добавить столько примечаний, сколько хотите. Кроме того, вам необходимо сначала сохранить входной сигнал ReadLine, если пользователь действительно попросил выйти, иначе продолжайте добавлять примечания.

var myNotes = new List<Note>(); 
var firstNote = new Note(); 
firstNote.addText("Hi there"); 

Note note; 
while (true) 
{ 
    var input = Console.ReadLine(); 
    if (input.Equals("exit", StringComparison.OrdinalIgnoreCase)) 
    { 
     break; 
    } 
    note = new Note(); 
    note.addText(input); 
    myNotes.Add(note); 
} 
+0

Вы думаете, я должен удалить этот ответ или объяснить его? –

+0

@ OrelEraki просто добавьте простое объяснение. Например. а что такое «правда»? – Ben

+0

Вы должны это объяснить. Я не уверен, что OP все это поймет, и неясно, хочет ли OP добавить только 2 ноты с добавлением текста, пока вы не войдете в выход или N заметок, пока пользователь не выберет exit – Mystra007

0

Общий формат использовать что-то вроде этого (а во время цикла с условием разрыва):

// put code above while loop that only needs to be executed once 
while (true) {   
    // get the user input for every iteration, allowing to exit at will 
    String line = Console.ReadLine(); 
    if (line.Equals("exit")) { 
     // exit the method. 
     return; // use "break" if you just want to exit the loop 
    } 
    // this is what will happen in the loop body since we didn't exit 
    // put whatever note stuff you want to execute again and again in here 
} 

Вы хотите изменить то, что происходит в теле этого цикла в зависимости от того, что точно вы хотите сделать с вашими экземплярами заметок. Но в целом вы неоднократно запрашиваете пользователя для ввода до тех пор, пока не будет выполнено какое-либо условие, а затем вы выйдете из цикла. Вы можете решили, что условие (например, "ввести 10 нот", "типа выход"; и т.д.)

+0

Я думаю, он хочет добавить N заметок пока пользователь не войдет в «exit». Две новые заметки - ошибка. Я мог бы добавить ответ, поддерживающий список заметок, но я думаю, что это было бы грубо с моей стороны. – Mystra007

+1

'do ... while' цикл будет более подходящим здесь.И позволит разумное условие выхода, а не только 'while (true)' – n0rd

+0

Ok спасибо всем. я думаю, что получаю то, что вы все подразумеваете, (я думаю ..) Я очень новичок в C#, спасибо вам за ваши ответы .. @eser код скопирован прямо из визуальной студии –

0

Per @ n0rd замечания, вот как бы ... в то время как цикл может работать:

string input; 
var myNotes = new List<Note>(); 
do{ 
    input = Console.ReadLine(); 
    if (!input.Equals("exit", StringComparison.OrdinalIgnoreCase)){ 
     var note = new Note(); 
     note.addText(input); 
     myNotes.Add(note); 
    } 
} while (!input.Equals("exit", StringComparison.OrdinalIgnoreCase)); 
0

One способ сделать это заключается в следующем:

List<string> simpleList = new List<string> { "Alpha", "Bravo", "Charlie", "Delta", "Echo" }; //Dummy data source 
     Console.WriteLine("Enter a call sign to find in the list. Press X to exit: "); //Prompt 

     string callSign; 
     string exitKey = "x"; 

     while ((callSign = Console.ReadLine()) != exitKey.ToLower()) { //This is where the "Magic" happens 
      if (simpleList.Contains(callSign)) { 
       Console.WriteLine($"\"{callSign}\" exists in our simple list");//Output should the list contain our entry 
       Console.WriteLine(""); //Not really relevant, just needed to added spacing between input and output 
      } 
      else { 
       Console.WriteLine($"\"{callSign}\" does not exist in our simple list"); //Output should the list not contain our entry 
      } 
      Console.WriteLine(""); 
      Console.WriteLine("Enter a call sign to find in the list. Press X to exit: ");//Prompt 
     } 

линия:

while ((callSign = Console.ReadLine()) != exitKey.ToLower()) { 
     ... 

где цикл происходит. Если запись не равна exitKey, этапы повторяются.

Смежные вопросы