проблема с получением пользовательского ввода и сохранением в массиве в c# - PullRequest
0 голосов
/ 20 марта 2020

я написал простой код, моей программе нужно два ввода, одно имя, а второе номер (номер телефона). и я написал один раздел, чтобы найти контакты. когда пользователь вводит 1, он должен добавить имя и номер телефона, затем пользователь может ввести 1 или 2 (1 для добавления контакта и 2 для поиска), когда пользователь вводит 1 снова, все старые данные удаляются, и я не хочу, чтобы это помогло.

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

namespace project_01
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] names = new string[5];
            string[] phonenumb = new string[5];
            bool itsTrue;
            //int counter;

            string help = @"enter 1 for add contact.
enter 2 for exit.0
enter 3 for search";
            Console.WriteLine(help);
            while (true)
            {
                Console.Write("=>");
                int input = Convert.ToInt32(Console.ReadLine());
                if (input == 1)
                {

                    for (int i = 0; i < names.Length;)
                    {

                        Console.Write("name : ");
                        names[i] = Console.ReadLine();
                        Console.Write("number : ");
                        phonenumb[i] = Console.ReadLine();
                        i++;
                        break;                        
                    }

                }
                else if (input == 2)
                {
                    Console.Write("enter y for exir and n to stay: ");
                    string exit = Console.ReadLine().ToUpper();
                    if (exit == "Y")
                    {

                        break;
                    }
                    else if (exit == "N")
                    {
                        continue;
                    }

                }
                else if (input == 3)
                {
                    Console.Write("enter the name: ");
                    string search = Console.ReadLine();
                    itsTrue = false;
                    for (int j = 0; j < names.Length; j++)
                    {
                        if (search == names[j])
                        {
                            Console.WriteLine("name: {0}", names[j]);
                            Console.WriteLine("number:{0}", phonenumb[j]);
                            itsTrue = true;
                            break;
                        }

                    }
                    if (!itsTrue)
                    {
                        Console.WriteLine("content not found.");
                    }

                }
            }
        }
    }
}

1 Ответ

1 голос
/ 20 марта 2020

Давайте пройдемся по вашему коду для опции меню 1:

for (int i = 0; i < names.Length;)
{                        
    Console.Write("name : ");
    names[i] = Console.ReadLine();
    Console.Write("number : ");
    phonenumb[i] = Console.ReadLine();
    i++;
    break;                        
}

Он начинается все oop с i, установленным в 0, и повторяется, пока i < names.Length. На первой итерации l oop он присваивает names[i] (что будет names[0]) значение, считываемое с консоли, а затем номер телефона. i затем увеличивается до 1, и сразу после этого l oop прерывается.

Теперь представьте, что в следующий раз будет нажата 1. Он все еще работает точно такой же код. L oop начинается с i как 0, присваивается names[0] и phonenumb[0], затем выходит из l oop. Не то, что вы хотите.

Хотите добавить oop для добавления новой строки? Если так, то почему? Это делает что-то больше, чем один раз? Нет. Это просто должно сделать одну вещь. Обратите внимание, что даже с вашим l oop вы всегда выбиваете l oop на первой итерации, так что это даже не al oop.

Недостающий фрагмент - это то, что вы хотите написать до names и phonenumb при разных индексах каждый раз. Для этого вам нужно иметь переменную, которая сохраняется в течение каждой итерации меню l oop. Если вы объявите что-то вроде int insertIndex = 0; за пределами вашего меню l oop, тогда вы можете вместо этого изменить лог вставки c на что-то вроде этого:

Console.Write("name : ");
names[insertIndex] = Console.ReadLine();
Console.Write("number : ");
phonenumb[insertIndex] = Console.ReadLine();
insertIndex++;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...