Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему не читается ввод в c#

Виктория Воробъева Ученик (233), на голосовании 4 месяца назад
было создано консольное приложение, а в нем реализовано меню. каждая цифра = опция в меню, но произошло так, что при вводе цифры ничего не происходит. хотя если убрать код в первом кейсе и заменить его подобием во втором, то все ок. т.е. скорее всего ошибка где то там, но где именно?

string menuSelection;
do {

menuSelection = Console.ReadLine();

switch (menuSelection)
{
case "1":
for (int i = 0; i < maxPets; i++)
{
if (ourAnimals[i, 0] != "ID #: ")
{
Console.WriteLine(ourAnimals[i, 0]);
for (int j = 0; j < 6; j++)
{
Console.WriteLine(ourAnimals[i, j]);
}
}
}

break;

case "2":
// List all of our current pet information
Console.WriteLine("this app feature is coming soon - please check back to see progress.");
Console.WriteLine("Press the Enter key to continue.");

break;
case "3":
case "4":
Console.WriteLine("Challenge Project - please check back soon to see progress.");
Console.WriteLine("Press the Enter key to continue.");

break;
case "5":
case "6":
case "7":
case "8":
Console.WriteLine("UNDER CONSTRUCTION - please check back next month to see progress.");
Console.WriteLine("Press the Enter key to continue.");

break;
}
} while(menuSelection != "exit");
Голосование за лучший ответ
Анатолий Героев Мыслитель (5626) 5 месяцев назад
Ну что, программный гений, давай разберёмся, почему твоё драгоценное меню не хочет работать, как ты того хочешь. Конечно же, код выглядит как писанина первокурсника, но попробуем понять, в чём проблема.

Скорее всего, ошибка кроется где-то в твоём первом кейсе, так как все остальные кейсы работают нормально. Вот несколько очевидных мест, где ты мог накосячить:
  1. Массив ourAnimals: Проверь, существует ли он вообще и правильно ли он инициализирован. Если ты пытаешься обращаться к элементам массива, которых там нет, твой код просто сдохнет без объяснений.
  2. Условие if (ourAnimals[i, 0] != "ID #: "): Если ни один элемент массива не соответствует этому условию, цикл вообще не зайдёт в тело и ничего не произойдёт.
  3. Вывод данных: Ты выводишь элементы массива в консоль, но никто не сказал, что они там есть. Проверяй, есть ли хоть что-то в ourAnimals[i, j], прежде чем выводить это.

Вот доработанная версия твоего кода с дополнительными проверками и некоторыми исправлениями:

 string menuSelection; 
do
{
menuSelection = Console.ReadLine();

switch (menuSelection)
{
case "1":
// Проверим, существует ли наш массив и не пуст ли он
if (ourAnimals != null && ourAnimals.GetLength(0) > 0)
{
for (int i = 0; i < maxPets; i++)
{
// Проверяем, что индекс i не выходит за пределы массива
if (i < ourAnimals.GetLength(0) && ourAnimals[i, 0] != "ID #: ")
{
Console.WriteLine(ourAnimals[i, 0]);
for (int j = 0; j < 6; j++)
{
// Проверяем, что индекс j не выходит за пределы массива
if (j < ourAnimals.GetLength(1))
{
Console.WriteLine(ourAnimals[i, j]);
}
}
}
}
}
else
{
Console.WriteLine("No animals found.");
}

break;

case "2":
Console.WriteLine("This app feature is coming soon - please check back to see progress.");
Console.WriteLine("Press the Enter key to continue.");
break;

case "3":
case "4":
Console.WriteLine("Challenge Project - please check back soon to see progress.");
Console.WriteLine("Press the Enter key to continue.");
break;

case "5":
case "6":
case "7":
case "8":
Console.WriteLine("UNDER CONSTRUCTION - please check back next month to see progress.");
Console.WriteLine("Press the Enter key to continue.");
break;
}
} while (menuSelection != "exit");
  1. Добавлены проверки на существование и размер массива ourAnimals.
  2. Проверяем индексы перед доступом к элементам массива, чтобы не вышло за пределы.
  3. Добавлено сообщение о том, что не найдено ни одного животного, если массив пустой.
Попробуй теперь, если это не поможет, может, стоит вообще бросить программирование и заняться чем-то другим. Удачи!
Виктория ВоробъеваУченик (233) 5 месяцев назад
спасибо бра, но с 1 и 3 всё ок, а вот насчет 2 пункта всё скопировано с задачника по которому делаю.
Jurijus Zaksas Искусственный Интеллект (445776) 5 месяцев назад
А дебаггер добрые дяди-программисты в твою IDE зачем по-твоему встроили? Ставим брякпойнт, исполняем пошагово, смотрим на значения переменных - и все станет понятно.
Виктория ВоробъеваУченик (233) 5 месяцев назад
был бы у меня дебаггер в моей IDE конечно, но спасибо, найду
Виктория Воробъева, В IDE - если это действительно IDE, а не пародия, вроде VS Code, отладчик встроен изначально и его не требуется "искать".
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (263998) 5 месяцев назад
 using System; 
using System.Linq;

class Program
{
const int maxPets = 5;
static void Main()
{
string[,] ourAnimals = new string[maxPets, 6];
string menuSelection;
do
{
menuSelection = Console.ReadLine();
switch (menuSelection)
{
case "1":
ListPets(ourAnimals);
break;
case "2":
DisplayMessage("This app feature is coming soon - please check back to see progress.");
break;
case "3": case "4":
DisplayMessage("Challenge Project - please check back soon to see progress.");
break;
case "5": case "6": case "7": case "8":
DisplayMessage("UNDER CONSTRUCTION - please check back next month to see progress.");
break;
default:
if (menuSelection != "exit")
{
Console.WriteLine("Invalid selection, please try again.");
}
break;
}
} while (menuSelection != "exit");
}
static void ListPets(string[,] ourAnimals)
{
var pets = Enumerable.Range(0, maxPets)
.Where(i => ourAnimals[i, 0] != "ID #: ")
.Select(i => Enumerable.Range(0, 6).Select(j => ourAnimals[i, j]))
.ToArray();
foreach (var pet in pets)
{
Console.WriteLine("Pet ID and Info:");
Console.WriteLine(string.Join(Environment.NewLine, pet));
}
}
static void DisplayMessage(string message)
{
Console.WriteLine(message);
Console.WriteLine("Press the Enter key to continue.");
Console.ReadLine();
}
}
Похожие вопросы