Конвертировать строку в int в C # - PullRequest
4 голосов
/ 04 июня 2009

Я пытаюсь написать простую программу, которая просит пользователя ввести число, а затем я буду использовать это число, чтобы решить, сколько будет стоить билет для данного возраста. У меня возникли проблемы при попытке преобразовать строку в Int. В противном случае программа макета в порядке. Какие-либо предложения? спасибо

using System;

class ticketPrice
{    
    public static void Main(String[] args)
    {
        Console.WriteLine("Please Enter Your Age");
        int input = Console.ReadLine();
        if (input < 5)
        {
            Console.WriteLine("You are "+input+" and the admisson is FREE!");
        }
        else if (input > 4 & input < 18)
        {
            Console.WriteLine("You are "+input+" and the admission is $5");
        }
        else if (input > 17 & input < 56)
        {
            Console.WriteLine("You are "+input+" and the admission is $10");
        }
        else if (input > 55)
        {
            Console.WriteLine("You are "+input+" and the admission is $8");
        }
    }
}

Ответы [ 5 ]

11 голосов
/ 04 июня 2009

Попробуйте метод int.TryParse(...). Это не исключение.

http://msdn.microsoft.com/en-us/library/f02979c7.aspx

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

2 голосов
/ 04 июня 2009
  • Для простого разбора строк на целые числа (и другие числовые типы) используйте метод .TryParse(inputstring, yourintegervariable) этого числового типа. Этот метод выведет логическое значение (True / False), сообщающее, прошла операция или не прошла. Если результат ложный, вы можете выдать сообщение об ошибке, прежде чем идти дальше (не нужно беспокоиться о сбое вашей программы).

  • Предыдущий текст, касающийся операторов switch, был удален

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

1 голос
/ 04 июня 2009

Я предлагаю использовать метод Int32.TryParse () . Далее я предлагаю реорганизовать ваш код - вы можете сделать его намного чище (при условии, что это не просто пример кода). Одним из решений является использование списка пар ключ-значение для сопоставления возраста с поступлением.

using System;
using System.Collections.Generic;
using System.Linq;

static class TicketPrice
{
    private static readonly IList<KeyValuePair<Int32, String>> AgeAdmissionMap =
        new List<KeyValuePair<Int32, String>>
            {
                new KeyValuePair<Int32, String>(0, "FREE!"),
                new KeyValuePair<Int32, String>(5, "$5."),
                new KeyValuePair<Int32, String>(18, "$10."),
                new KeyValuePair<Int32, String>(56, "$8.")
            };

    public static void Main(String[] args)
    {
        Console.WriteLine("Please Enter Your Age!");

        UInt32 age;  
        while (!UInt32.TryParse(Console.ReadLine(), out age)) { }

        String admission = TicketPrice.AgeAdmissionMap
            .OrderByDescending(pair => pair.Key)
            .First(pair => pair.Key <= age)
            .Value;

        Console.WriteLine(String.Format(
            "You are {0} and the admission is {1}",
            age,
            admission));
    }
}

Я использовал целое число без знака, чтобы предотвратить ввод отрицательных возрастов, и поместил ввод в цикл. Таким образом, пользователь может исправить неверный ввод.

1 голос
/ 04 июня 2009
int number = int.Parse(Console.ReadLine());

Имейте в виду, что это вызовет исключение, если они введут неправильный номер.

0 голосов
/ 04 июня 2009

Первое, что вам нужно сделать, это заменить переменную input на строку:

string input = Console.ReadLine();

Если у вас есть это, есть несколько способов преобразовать его в целое число. Смотрите этот ответ для получения дополнительной информации:
Лучший способ привести объект к int

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...