2015-08-17 33 views
0

我想輸出一個變量,作爲來自用戶的輸入,但我得到了錯誤的數字。在Console.Read()0121錯誤的整數輸出()

這是到目前爲止我的代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace sequence 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int userInput = Console.Read(); 

      Console.WriteLine("User input is: {0}", userInput.GetType()); 
      Console.WriteLine("User input is: {0}", userInput); 
     } 
    } 
} 

輸出:

3 
User input type is: System.Int32 
User input is: 51 
Press any key to continue 

如果鍵入4,我得到52 5,53等。

+1

他們是ascii代碼。閱讀'Console.Read'文檔。 –

+0

我沒有downvote,但我假設原因是因爲閱讀'Console.Read'的文檔已經清除了這一點。 –

回答

4

使用Console.ReadLine()返回字符串,你需要轉換成int

試試這個

namespace sequence 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var input = Console.ReadLine(); 
      int userInput; 
      if (!int.TryParse(input, out userInput)) 
      { 
       Console.WriteLine("You have entered invalid number"); 
      } 
      else 
      { 
       Console.WriteLine("User input is: {0}", userInput.GetType()); 
       Console.WriteLine("User input is: {0}", userInput); 
      } 
      Console.WriteLine("Press any key to exit"); 
      Console.ReadKey();     
     } 
    } 
} 
+0

從'Main'返回將退出應用程序。用戶不可能讀取驗證消息。 – Gusdor

+0

@Gusdor謝謝你的建議。 –

0

這是因爲Console.Read()返回讀取字符的整數代碼。你必須從char中減去48才能得到實際的數字。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace sequence 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int userInput = Console.Read(); 

      Console.WriteLine("User input is: {0}", userInput.GetType()); 
      Console.WriteLine("User input is: {0}", userInput - 48); 
     } 
    } 
} 
+1

如果用戶輸入字符'A'(ascii 65),你會怎麼做? 17是否合適? – Gusdor

+0

閱讀問題:Console.Read()上的錯誤整數輸出() 我假設他對整數感興趣。 – Hristo

+0

這是查看它的一種方法。有沒有理由說'int.TryParse'不夠好? – Gusdor