Как проверить ввод пользователя для того, является ли оно целым числом? - PullRequest
5 голосов
/ 22 марта 2011

Он говорит мне, что не может конвертировать int в bool.Пробовал TryParse, но по какой-то причине список аргументов неверен.

Код:

private void SetNumber(string n)
{
    // if user input is a number then
    if (int.Parse(n)) 
    {
        // if user input is negative
        if (h < 0)
        {
            // assign absolute version of user input
            number = Math.Abs(n); 
        }
        else 
        {
            // else assign user input
            number = n;
        }
    }
    else
    {
        number = 0; // if user input is not an int then set number to 0  
    }
}

Ответы [ 10 ]

13 голосов
/ 22 марта 2011

Вы, вероятно, были очень близки, используя TryParse, но я предполагаю, что вы забыли ключевое слово out для параметра:

int value;
if (int.TryParse(n, out value))
{

}
6 голосов
/ 22 марта 2011

Просто используйте это:

int i;
bool success = int.TryParse(n, out i);

, если анализ был успешным, success равен true.

Если в этом случае i содержит число.

Возможно, вы неправильно указали out аргумент модификатор .Он имеет модификатор out, указывающий, что это значение инициализируется в вызываемом методе.

3 голосов
/ 06 мая 2013

Вы можете попробовать использовать простое регулярное выражение:

  bool IsNumber(string text)
    {
      Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
      return regex.IsMatch(text);
    }
3 голосов
/ 22 марта 2011
    private void SetNumber(string n)
    {
        int nVal = 0;

        if (int.TryParse(n, out nVal))
        {
            if (nVal < 0)
                number = Math.Abs(nVal);
            else
                number = nVal;
        }
        else
            number = 0;
    }
1 голос
/ 22 марта 2011

Есть много проблем с этим кодом:

  • Использование строчных комментариев в стиле VB (') вместо косых черт C #
  • Анализ целого числа возвращает целое число, а неbool
  • Вы должны использовать TryParse со значением out
  • h, похоже, не является действительным вообще.Это тип для n?
  • Существуют переменные, которые, кажется, не определены в области действия функции (число), они определены в области видимости класса?

Но попробуйте это:

private void SetNumber(string n)
{
    int myInt;
    if (int.TryParse(n, out myInt)) //if user input is a number then
    {
        if (myInt < 0) //if user input is negative
            number = Math.Abs(n); //assign absolute version of user input
        else //else assign user input
            number = n;
    }
    else number = 0; //if user input is not an int then set number to 0
}
1 голос
/ 22 марта 2011

int.Parse вернет вам целое число, а не логическое значение.

Вы можете использовать int.TryParse, как вы предложили.

int parsedValue;
if(int.TryParse(n, out parsedValue))
{
}
1 голос
/ 22 марта 2011

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

        private void SetNumber(string n)
        {
            int parsed = -1;
            if (int.TryParse(n, out parsed)) //if user input is a number then
            ...

Причина, по которой есть жалобы, что он не может преобразовать int в bool, заключается в том, что тип возвращаемого значения int.Parse() - это int, а не bool, а в c # условные выражения должны вычислять bool значения.

0 голосов
/ 07 апреля 2013
//vinojash@gmail.com
//In my knowledge i did this in simple way thanks for watch my code 
 static void Main(string[] args)
    {
        string a, b;
        int f1, f2, x, y;
        Console.WriteLine("Enter two inputs");
        a = Convert.ToString(Console.ReadLine());
        b = Console.ReadLine();
        f1 = find(a);   
        f2 = find(b);   

        if (f1 == 0 && f2 == 0)
        {
            x = Convert.ToInt32(a);
            y = Convert.ToInt32(b);
            Console.WriteLine("Two inputs r number \n so tha additon of these text box is= " + (x + y).ToString());
        }
        else
            Console.WriteLine("One or tho inputs r string \n so tha concadination of these text box is = " + (a + b));
        Console.ReadKey();

    }
        static int find(string s)
        {
        string s1 = "";
        int f;
         for (int i = 0; i < s.Length; i++)
            for (int j = 0; j <= 9; j++)
            {
                string c = j.ToString();
                if (c[0] == s[i])
                {
                    s1 += c[0];
                }
            }

        if (s==s1)
            f= 0;
        else
            f= 1;

        return f;
    }
0 голосов
/ 22 марта 2011

Ну, во-первых, внутренний оператор if имеет 'h' вместо 'n' if (h <0). Но TryParse должен работать там, предполагая, что «число» является переменной класса. </p>

 private void SetNumber(string n)
    {
        int temp;
        bool success = Int32.TryParse(n, out temp);

        // If conversion successful
        if (success)
        {
            // If user input is negative
            if (temp < 0)
                number = Math.Abs(temp); // Assign absolute version of user input
            else // Assign user input
                number = temp;

        }
        else
        {
            number = 0;
        }

    }
0 голосов
/ 22 марта 2011

int.Parse преобразует строку в целое число.Текущий у вас есть в выражении if, так что он обрабатывает возвращаемое значение int.Parse как bool, а это не так.

Примерно так будет работать:

private void SetNumber(string n)
{
    int num = 0;
    try{
        num = int.Parse(n);
        number = Math.Abs(num);
    }catch(Exception e){
        number = 0;
    }   
}
...