2014-01-26 164 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