2014-01-26 4 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; 
      } 
      ` 

콘솔 응용 프로그램 닫힙니다. 때로는 온도에 대한 값을 부여한 후에 닫힙니다. tryParse 및 Convert.toInt를 사용하여 시도했다. 그러나 나는 어떤 결과도 얻지 못하고있다. 이걸 도와 줄 수있는 사람? 추가로 ... 나는 단지 사용자가 정수 값 (가정으로)을 입력 할 것을 기대하고있다. 이 경우 tryparse 사용은 필수 사항이 아닙니까?

+0

내 대답. –

답변

0

문제 1 : 당신은 당신이 누를 때 Console.Read() method.so을 사용하는 당신이 입력 한 값/문자를 반환 할 Enter key를 눌러야 여기 console.but에서 하나의 문자를 읽을 Console.Read() 방법을 사용 Enter 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 : 당신은 문자 당신이 그것의 ASCII 값을 저장합니다 콘솔에서 문자를 읽을 때대로 작동하지 않습니다 직접 번호로 콘솔에서 입력 비교 tryig된다 예를 들어 콘솔에서 1을 입력하면 정수 변수 ch (ACII 코드 1은 49)에 49으로 저장되므로 1과 비교하면 일치하지 않습니다.

해결책 2 :이므로 문자 값과 일치해야합니다. 값을 작은 따옴표로 묶어 console에 입력 된 정확한 값과 일치시킵니다.

것은이 시도 : 작은 따옴표

내에서 1, 2 동봉
  switch (ch) 
      { 
       case '1': 
       --- 
       break; 
       case '2': 
       ----- 
       break; 
      } 

전체 코드 : 당신이 reading.check을 완료하기 위해``Console.ReadLine()를 추가 할 필요가

 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

관련 문제