2016-04-13 32 views
0

"Giriş dizesi doğru biçimde değil." Bu kodun hata iletisiGiriş dizesi doğru biçimde değil. C# (Yeni)

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

Kodumda hata yok. Yukarıdaki hata dışında. Arduino donanımından gelen analog değeri (hesaplamanın üstünde) seri iletişim (kablo) ile elde etmek için bir hesaplama yaptım. Arduino yine de iyi çalışıyor. Bu hata ortaya çıkana kadar her şey yolundaydı ... Neden? ağlar

p/s: Pek çok çözümden geçtim ama yine de .. İşte şimdi buradayım. o kodunuzu bu sahip istisna atar başka çalışıyor dönüştürülebilir bir dize ise üzgün İngilizcemde

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

Verilerim seri iletişim yoluyla gerçekleştirilmiştir. Arduino'dan Visual Studio'ya. Arduino iyi çalışıyor olsa da –

+2

Hata ayıklayıcınız ne 'ayrıştırıldı [0]' içerir? Sanırım isteğe bağlı bir lider '-' ile sadece rakamlardan başka bir şey. –

+0

'parse [0]' nedir? – Mostafiz

cevap

0

için Sen parsed[0] bulunan değerin temelleri üzerinde böyle hatayı alıyorsanız. Yani, parsed[0] içindeki içerik bir tam sayıya dönüştürülemez; bu tür durumlarda, int.Parse yerine int.TryParse kullanmalısınız, iç hata işleme, dönüştürme işleminin başarılı olup olmadığını belirlemenize yardımcı olur. bu olur neden

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

kodumu gönderdim böylece kodum bu şekilde kullanılamıyor mu? tamam buna değişecektir. teşekkürler :) –

+0

efendim, 1'den fazla ayrıştırılmış varsa [0]? –

+0

[1] ayrıştırdım, [2] ayrıştırdım ve ayrıştırdım [3] –

1

birkaç olası durum vardır:

Yani kod irade gibi görünüyor. Bunun nedeni, (1) parsed[0] numarasının too big olması, bir diğerinin ise parsed[0]'un (2) numarasız, (3) tanınmayan bin ayırıcı veya (4) ondalık ayırıcının ( int ayrıştırmada bulunmaması) bulunmasıdır. Kodunuz için kültür.

Her durumda, Visual Studio hata ayıklayıcınızla parsed[0] değerini kontrol edin ve int aralığı için tamamen kabul edilebilir bir sayısal formata sahip olduğundan emin olun. gibi bir şey: Ayrıca

1234 

, olmayan çözümlenen sayı size istisna soruna neden olmadığından emin olmak için TryParse yerine Parse kullanarak

  1. ait düşünebilir. Böyle

şey: senin sayısal hesaplama sonucunu yazdırmak için

  • kullanım ToString(),
  • TryParse ve
  • sonucunu kontrol potansiyel orijinal int.Parse(parsed[0]) * 100/1023 yapmak tamsayı bölme dikkat

    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

    1'den fazla ayrıştırılmış [0] varsa ne olur? –

    +0

    [1] ayrıştırdım, [2] ayrıştırdım ve [3] –

    +0

    @AqilahZainuddin'i aynı mantığı kullanabilir ve 'for' döngüsünü kullanabilirsiniz - mantıksal süreçte hepsi aynı veya hemen hemen aynı olmaları şartıyla. Mevcut sorudan oldukça farklı olup olmadığını daha fazla açıklığa kavuşturmak için bunu ** yeni ** bir soru olarak belirtebilirsiniz. – Ian