2014-01-26 203 views
2

我想從C#中的控制檯應用程序中讀取一個double值和一個整數值。 `輸入格式不正確

  int ch = Console.Read(); 
      Console.WriteLine("Enter a random integer"); 
      int x = int.Parse(Console.ReadLine()); 



      switch (ch) 
      { 
       case 1: 

        TempServiceRef.Service1Client s1 = new ConsoleTempApplication.TempServiceRef.Service1Client(); 
        Console.WriteLine("Enter temperature"); 
        string n = Console.ReadLine(); 
        int param = int.Parse(n); 
        double result = s1.c2f(param); 
        Console.WriteLine(result); 
        Console.ReadLine(); 
        break; 

       case 2: 

        TempServiceRef.Service1Client s2 = new ConsoleTempApplication.TempServiceRef.Service1Client(); 
        Console.WriteLine("Enter temperature"); 
        int param1 = int.Parse(Console.ReadLine()); 
        double result1 = s2.f2c(param1); 
        Console.WriteLine(result1); 
        Console.ReadLine(); 
        break; 

       default: 
        Environment.Exit(0); 
        break; 
      } 
      ` 

控制檯應用程序關閉,一旦我嘗試輸入我的ch值。有時它會在給出溫度值後關閉。我嘗試使用tryParse和Convert.toInt。但我沒有得到任何結果。任何人可以幫助我呢?進一步......我只是希望用戶只輸入整數值(作爲一個假設)。這種情況下的tryparse用法不是強制的嗎?

+0

你需要添加'到Console.ReadLine()'完成reading.check我回答。 –

回答

0

問題1:您正在使用Console.Read()方法讀取單個字符從這裏console.but你需要按Enter key返回輸入值/字符作爲您使用的是Console.Read() method.so當您按下輸入Console.ReadLine()方法將獲得值空字符串和int.Parse()拋出空字符串的異常。

解決方案1:您需要的Console.Read()方法後添加Console.ReadLine()閱讀的第一個字符。然後你可以繼續。

試試這個:

  int ch =Console.Read();    
      Console.ReadLine(); //add this statement 
      Console.WriteLine("Enter a random integer"); 
      int x = int.Parse(Console.ReadLine()); 

問題2:您tryig比較字符從控制檯直接數字不,當你閱讀從控制檯它將存儲它的ASCII值的字符作爲工作進入不是直接的整數。例如,如果您從控制檯輸入1,它將以整數變量ch(1的ACII碼爲49)存儲爲49,因此,當您與1進行比較時,它不匹配。

解決方案2:所以你需要匹配它的字符值。因此請將這些值放在單引號內以與在控制檯中輸入的確切值匹配。

試試這個:單引號

內圍1和2
  switch (ch) 
      { 
       case '1': 
       --- 
       break; 
       case '2': 
       ----- 
       break; 
      } 

完整代碼:

 int ch = Console.Read(); 
     Console.ReadLine();//Add this line to complete reading of a character 
     Console.WriteLine("Enter a random integer"); 
     int x = int.Parse(Console.ReadLine()); 



     switch (ch) 
     { 
      case '1': 

       TempServiceRef.Service1Client s1 = new ConsoleTempApplication.TempServiceRef.Service1Client(); 
       Console.WriteLine("Enter temperature"); 
       string n = Console.ReadLine(); 
       int param = int.Parse(n); 
       double result = s1.c2f(param); 
       Console.WriteLine(result); 
       Console.ReadLine(); 
       break; 

      case '2': 

       TempServiceRef.Service1Client s2 = new ConsoleTempApplication.TempServiceRef.Service1Client(); 
       Console.WriteLine("Enter temperature"); 
       int param1 = int.Parse(Console.ReadLine()); 
       double result1 = s2.f2c(param1); 
       Console.WriteLine(result1); 
       Console.ReadLine(); 
       break; 

      default: 
       Environment.Exit(0); 
       break; 
     } 
+0

嘿,非常感謝....但我想通了。但它有點矛盾你的答案。代碼的工作沒有我必須使用單引號。我不知道什麼原因可能是..但http://msdn.microsoft.com/en-us/library/aa664749(v=vs.71).aspx也說同樣的事情。你對readLine()部分是正確的。非常感謝。我想我是在比較整數本身...而不是字符......我認爲這是有道理的 – sdwaraki