super_user Ответов: 3

Принимать входные данные из консольного приложения пользователя C#


Я пытаюсь что когда я ввожу 10 случайных чисел на консоли то сообщение будет отображаться
эти цифры меньше 10

например,

если я введу эти случайные числа
10,9,12,45,120,2,3,1,9,14
затем
сообщение
9,2,3,1,9 меньше 10

я пробую это

Что я уже пробовал:

public void p1()
{
   try
   {
       Console.WriteLine("Enter numbers");

       int num = Convert.ToInt32(Console.ReadLine());

       if (num < 10)
       {
           Console.WriteLine("less num",num);
           Console.ReadLine();

       }
       else
       {
           Console.WriteLine("Not less than num", num);
           Console.ReadLine();
       }
   }
   catch(Exception ex)
   {
       throw new Exception();
   }


}


но это работает так когда я ввожу только 1 например если я ввожу число 9 то сообщение отображает меньше числа а когда я ввожу 12 то сообщение отображает не меньше числа

где как хочу
я ввожу 10 чисел и из этой программы определяю какие числа меньше 10

как я это делаю

ПРОВЕРЬТЕ ЭТОТ GIF
http://i.imgur.com/xmfiApI.gifv[^]

Prabu_Anand22

попробуйте ввести входные данные пользователя в массив типа int, а затем, используя цикл for, пройдите по контенту, проверяя значения меньше или больше, если это так, чтобы отобразить сообщение по желанию.

super_user

http://i.imgur.com/xmfiApI.gifv

3 Ответов

Рейтинг:
2

Richard MacCutchan

int num = Convert.ToInt32(Console.ReadLine());

Эта строка преобразует только одно число, так как это то, что вы попросили ее сделать. Вы должны иметь дело с несколькими числами чем-то вроде:
string[] numbers = Console.ReadLine().split(" ");
foreach (string num in numbers)
{
    int num = Convert.ToInt32(num);
    // test for less or not
}

Примечание лучше использовать TryParse скорее, чем Convert чтобы учесть случай, когда пользователь вводит недопустимые символы.


super_user

это показывает ошибку
Ошибка 1 лучший перегруженный метод соответствует ' string.Split(params char []) ' имеет некоторые недопустимые аргументы
Ошибка 2 Аргумент 1: не удается преобразовать из 'string' в ' char[]'

Richard MacCutchan

Тогда сейчас было бы хорошее время, чтобы пойти в документации MSDN и узнать строку.метод Split(ы).

Рейтинг:
2

Member 12747274

Я бы решил это так:

namespace check_Numbers
{
    class Program
    {
        static void Main(string[] args)
        {    
            string[] seperators = {",", " ", ";", "."};
            int num2;
            Console.WriteLine("Input numbers over 10:");

            string[] splitArray = Console.ReadLine().Split(seperators, StringSplitOptions.RemoveEmptyEntries);
            foreach (string num in splitArray)
            {

            If(Int32.TryParse(num, out num2) == true)
            {
                if (num2 < 10)
                {
                    Console.WriteLine(num + " is smaller than 10");
                }
            }
            else
            {
                Console.WriteLine(num + " is not a f***ing number...");
            }
            }
        }
    }
}


[no name]

Почему вы преобразуете строку в строку? Почему вы используете преобразования.ToInt32? Что происходит, когда пользователь вводит 1 2 3 a b c?

Member 12747274

Спасибо за обратную связь. Прежде всего, я новичок в C#, и я думаю, что преобразование строки в строку-это остаток от моего устранения какой-то странной проблемы, возникшей у меня с ".Split". я не мог интегрировать только простой символ ( " ,") и сделал обходной путь с массивом строк. Да, это абсурдно ненужно!

Но для новообращенного.ToInt: я сделал это, чтобы проверить, меньше ли число 10?
Я думаю, что это необходимо или я ошибаюсь? Но да, вы правы, я должен "попытаться поймать" это!

[no name]

Нет, вы вообще не должны использовать Convert. Вы получите исключение, если кто-то наберет что-то другое, кроме номера. Следует ли нам инт.TryParse, который не будет выдавать исключение, если преобразование завершится неудачно.

Member 12747274

Теперь я обновил свой код, спасибо за совет. Но теперь есть проблема, что каждый персонаж рассматривается как "младше 10". Не было бы исключением + попытаться поймать лучше, чтобы вернуть сообщение об ошибке? Или есть возможность "игнорировать" ввод символов?

[no name]

Поскольку TryParse возвращает bool, указывающий на успех или неудачу, ваше сообщение об ошибке будет показано в другой части вашего if. Исключения могут быть дорогостоящими с точки зрения обработки, поэтому я стараюсь избегать их как можно больше. Вы могли бы поймать исключение здесь, но есть лучший способ сделать это.

Member 12747274

Ладно, теперь понятно. Поэтому я еще раз обновил свой код, и теперь его стоит использовать :D

Рейтинг:
0

Patrice T

Цитата:
но это работает так когда я ввожу только 1 например если я ввожу число 9 то сообщение отображает меньше числа а когда я ввожу 12 то сообщение отображает не меньше числа

где как хочу
я ввожу 10 чисел и из этой программы определяю какие числа меньше 10
Ваш код делает именно то, что вы просили.
Как это возможно, что вы не понимаете, что делает код ? Это твой код ?

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

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


super_user

нет... когда я ввожу 10 чисел по горизонтали и ввожу затем ошибку отображения необработанного исключения типа ' System.Исключение " произошло в practise.exe
где, как и когда я пытаюсь ввести число по вертикали, то есть когда я ввожу число 12, а затем нажимаю enter, то появляется сообщение, что не меньше 10 ...где как я хочу ввести 10 чисел то хочу отобразить сообщение

super_user

проверьте этот GIF
http://i.imgur.com/xmfiApI.gifv

Patrice T

GIF не существует

super_user

проверить еще раз .. это существует

Patrice T

вы сделали его доступным для публики ?

super_user

это всегда публично вы можете проверить обновленный вопрос