2016-04-13 47 views
0

"入力文字列が正しい形式ではありませんでした。"このコードからのエラー入力文字列の形式が正しくありませんでした。 C#(新)

rainTb.Text = " " + int.Parse(parsed[0]) * 100/1023; 

私のコードに誤りはありません。上記のエラーを除いて。私はシリアル通信(ケーブル)を介してArduinoハードウェアからアナログ値(上記の計算値)を抽出する計算をしました。 Arduinoはうまく動作します。このエラーが表示されるまで、すべては問題ありませんでした...なぜですか? 叫び

p/s:私はまだ多くの解決策を経てきましたが、まだ私は今ここにいます。それはあなたのコードは、それはあなたが得た例外をスローし、他の正常に動作転換の文字列であれば申し訳ありませんが、私の英語

private void ProcessCOMRx(object sender, EventArgs e) 
    { 

     if (!string.IsNullOrEmpty(COMRx)) 
     { 
      systemTb.Text = "Processing Data..."; 
      systemTb.BackColor = System.Drawing.Color.Lime; 
      string [] parsed = COMRx.Split(','); 
      int curveNo; 

      if (parsed.Count() > zedAll.GraphPane.CurveList.Count()) 
       curveNo = zedAll.GraphPane.CurveList.Count();     
      else     
       curveNo = parsed.Count();     

      for (int k = 0; k < curveNo; k++) 
      { 
       for (int j = zedAll.GraphPane.CurveList[k].NPts - 1; j > 0; j--) 
       { 
        zedAll.GraphPane.CurveList[k].Points[j].Y = zedAll.GraphPane.CurveList[k].Points[j - 1].Y; 
       } 
       double temp = 0;      
       try 
       { 
        temp = double.Parse(parsed[k]); 
       }      
       catch      
       { 
        systemTb.Text = "Parse Error"; 
        systemTb.BackColor = System.Drawing.Color.Red; 
       } 
       rainTb.Text = "" + int.Parse(parsed[0]) * 100/1023; 
       phTb.Text = "" + (3.5 + int.Parse(parsed[1]) * 4.5/1023); 
       moistTb.Text = "" + int.Parse(parsed[2]) * 100/1023; 
       tempTb.Text = "" + int.Parse(parsed[3]) * 100/1023; 


       zedAll.GraphPane.CurveList[k].Points[0].X = 0; 
       zedAll.GraphPane.CurveList[k].Points[0].Y = temp;     
      } 

     } 
     else 
     {     
      this.BeginInvoke(new EventHandler(processPumpStates)); 
     } 

    } 
+0

私のデータはシリアル通信によるものです。 ArduinoからVisual Studioまで。 Arduinoはうまく動作しますが –

+2

デバッガは 'parsed [0]'に何が入っていると言いますか?私は、オプションの先頭に '-'をつけた数字だけではないと思っています。 –

+0

'parse [0]'には何が入っていますか? – Mostafiz

答えて

0

のためにあなたはparsed[0]に含まれる値の基礎の上に、このようなエラーが出ています。つまり、parsed[0]の内容が整数に変換できない場合は、int.Parseの代わりにint.TryParseを使用する必要があります。変換が成功したかどうかを判断するのに役立つ内部エラー処理が行われています。

だから、のようなコード意志ルックス:それはなぜ起こるか

int tempNumber=0; 
if (int.TryParse(parsed[0], out tempNumber)) 
{ 
    Textbox1.Text = " " + (tempNumber * 100/1023).ToString(); 
} 
else 
{ 
    Textbox1.Text= "invalid zipCode"; 
} 
+0

を掲載しましたので、私のコードをそのように使うことはできません。大丈夫ですこれに変更されます。ありがとう:) –

+0

さん、私は1以上の解析[0]があればどうですか? –

+0

私は[1]、parsed [2]を解析し、[3] –

1

は、いくつかの可能なケースがあります。 1つは、parsed[0]too bigであることと、parsed[0]に(2)非数字、(3)認識されていない1000個の区切り文字、(4)小数点区切り文字(int構文解析では存在しない)あなたのコードの文化。

すべての場合、Visual Studioデバッガでparsed[0]の値を確認し、int範囲の純粋に受け入れ可能な数値形式であることを確認してください。ような何か:

1234 

はまた、あなたは非解析された数があなたの例外の問題を起こさないことを確実にするためにTryParse代わりのParseを使用して

  1. で検討することができます。
  2. あなたの数値計算結果を印刷するために使用ToString()
  3. TryParse
  4. あなたが潜在的に元int.Parse(parsed[0]) * 100/1023で行う整数除算の用心の結果を確認します。このような

何か:

int val; 
bool result = int.TryParse(parsed[0], out val); 
if (!result) 
    return; //something has gone wrong 

Textbox1.Text = " " + (val * 100d/1023d).ToString(); //note the d 
+0

を解析しました。 –

+0

私は[1]、構文解析[2]および解析[3] –

+0

@AqilahZainuddin同じ論理を使用して 'for'ループを使用することができます。現在の質問とはかなり異なるかどうかをさらに明確にするために、**新しい**質問としてそれを置くことができます。 – Ian

関連する問題