web-dev-qa-db-ja.com

ユーザー入力が整数かどうかを検証するにはどうすればよいですか?

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  
    }
}
5
Namespace

あなたはおそらくTryParseを使用して非常に近かったでしょうが、パラメータのoutキーワードを忘れたと思います。

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

}
14
Justin

これを使用するだけです:

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

解析が成功した場合、successtrueです。

その場合、iに番号が含まれます。

以前はout引数修飾子​​が間違っていた可能性があります。呼び出されたメソッド内で初期化される値であることを示すout修飾子があります。

6
Mikael Östberg

簡単な正規表現で試すことができます:

  bool IsNumber(string text)
    {
      Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
      return regex.IsMatch(text);
    }
3
Yan Zhao
    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;
    }
3
Bala R

_int.TryParse_を使用して、以下のようなものを試すことができます。

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

intboolに変換できないという苦情がある理由は、int.Parse()の戻り値の型がintであり、boolではなく、c#条件でbool値を評価する必要があるためです。

1

int.Parseは、ブール値ではなく整数を返します。

提案したように、int.TryParseを使用できます。

int parsedValue;
if(int.TryParse(n, out parsedValue))
{
}
1
Swaff

このコードには多くの問題があります。

  • C#スラッシュの代わりにVBスタイルの行コメント( ')を使用する
  • 整数の解析はboolではなくintを返します
  • アウト値でTryParseを使用する必要があります
  • 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
Paul Sasik

一つには、内側のifステートメントに「n」の代わりに「h」が含まれているif(h <0)。ただし、「number」がクラス変数であると仮定すると、TryParseはそこで機能するはずです。

 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
Tib
//[email protected]
//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
Vino

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;
    }   
}
0
Shakakai