Добавление переключателя - PullRequest
0 голосов
/ 29 января 2020

Я хочу добавить регистр переключателя, чтобы пользователь не мог писать строки при вводе температуры или когда нечего удалять, он говорит: «нечего удалять, go вернуться в меню».

List<string> Temp = new List<string>();

while (true)
{
    string val;
    Console.WriteLine("[L] ägg till temp-mätning: ");
    Console.WriteLine("[S] kriv ut alla temperaturer och medeltemperatur");
    Console.WriteLine("[T] ag bort temp-mätning");
    Console.WriteLine("[A] vsluta");
    Console.Write("Selection: ");

    val = Console.ReadLine();

    if (val == "l" || val == "L")
    {

        Console.WriteLine("add temperature : ");
        Temp.Add(Console.ReadLine());
        Console.Clear();
    }

    else if(val == "s" || val == "S") 
    {
        int index = 1;
        Console.Clear();
        Console.WriteLine($"Your temperatures are: ");
        Temp.ForEach(x => Console.WriteLine($"{index++} - {x}"));
    }
    else if (val == "t" || val == "T")
    {
        Console.Write($"Which temp do you want to delete [index from 1 to {Temp.Count}]: ");
        int deleteIndex = int.Parse(Console.ReadLine()) - 1;
        Temp.RemoveAt(deleteIndex);
    }
    else
    {
        Console.WriteLine("incorrect input: ");
        Console.Clear();
        break;

    }

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Для управления использованием ввода вы можете извлечь методы , например,

 private static int ReadInteger(string title) {
   while (true) {
     if (!string.IsNullOrWhiteSpace(title))
       Console.WriteLine(title);

     if (int.TryParse(Console.ReadLine(), out int result))
       return result;

     Console.WriteLine("Incorrect syntax, please, try again.");
   }
 }

, затем вы можете поставить

 val = Console
   .ReadLine()
   .Trim()      // Let's be nice and tolerate leading / trailing spaces, e.g. " L "
   .ToUpper();

 val = val.Substring(0, Math.Max(1, val.Length));

 switch (val) {
   case "L":
     // We read valid integer, turn it to string and out to Temp
     Temp.Add(ReadInteger("add temperature : ").ToString());
     Console.Clear();

     break;
   case "T":
     int deleteIndex = ReadInteger(
       "$"Which temp do you want to delete [index from 1 to {Temp.Count}]: ");

     if (deleteIndex >= 0 && deleteIndex < Temp.Count)
       Temp.RemoveAt(deleteIndex);
     else
       Console.WriteLine("Index out of range");

     break;

  ...   
 }
0 голосов
/ 29 января 2020

Пожалуйста, проверьте C# ссылки на веб-сайты или книги, прежде чем задавать вопросы.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/

Вот код, который вы хотели, надеюсь, это поможет вам:

List<string> Temp = new List<string>();

while (true)
{
menu:
    string val = string.Empty;
    Console.WriteLine("[L] ägg till temp-mätning: ");
    Console.WriteLine("[S] kriv ut alla temperaturer och medeltemperatur");
    Console.WriteLine("[T] ag bort temp-mätning");
    Console.WriteLine("[A] vsluta");
    Console.Write("Selection: ");

    val = Console.ReadLine();

    switch (val.ToLower())
    {
        case "l":
        addTemperature:
            Console.WriteLine("add temperature : ");
            string temperatureInput = Console.ReadLine();
            int temperatureToAddToList;
            try
            {
                temperatureToAddToList = Convert.ToInt32(temperatureInput); //This line trys to convert string variables to integer variables. If string variable includes any character, it will throw an exception.
            }
            catch (Exception error) //If an exception was thrown, this code block gets activated, which will give out the message you asked for.
            {
                Console.Clear();
                Console.WriteLine("Please enter a number instead of a string!");
                goto addTemperature;
            }
            Temp.Add(temperatureInput.Trim());
            Console.Clear();
            break;
        case "s":
            int index = 1;
            Console.Clear();
            Console.WriteLine($"Your temperatures are: ");
            Temp.ForEach(x => Console.WriteLine($"{index++} - {x}"));
            break;
        case "t":
            if (Temp.Count == 0)
            {
                Console.Clear();
                Console.WriteLine("There is nothing to delete, go back to menu.");
                goto menu;
            }
            else
            {
                Console.Write($"Which temp do you want to delete [index from 1 to {Temp.Count}]: ");
                int deleteIndex = int.Parse(Console.ReadLine()) - 1;
                Temp.RemoveAt(deleteIndex);
                break;
            }
        default:
            Console.WriteLine("incorrect input: ");
            Console.Clear();
            break;
    }

Я пересмотрел и обновил мой пример кода, чтобы лучше решить вашу проблему.

...