2013-11-28 4 views
0

"처리되지 않은 예외 : System.FormatException : 입력 문자열의 형식이 올바르지 않습니다." 하지만 실제로 TryParse를 사용하여 Exception을 catch합니다. 입력 문자열 인 경우C# 왜 "처리되지 않은 예외 : System.FormatException : 입력 문자열이 올바른 형식이 아닙니다." TryParse를 사용할 때?

using System; 
using System.Linq; 
using System.Collections.Generic; 

class MinAndMax 
{ 
    static void Main() 
    { 
     // Task 3 - Write a program that reads from the console 
     // a sequence of N integer numbers and returns the minimal 
     // and maximal of them. 

     int n; 
     double num = 0, counter = 0, minNum = 0, maxNum = 0; 
     List<double> numbers = new List<double>(); 

     Console.Write("How many numbers will you enter: "); 
     bool isNum = int.TryParse(Console.ReadLine(), out n); 

     if (isNum) 
     { 
      for (counter = 1; counter <= n; counter++) 
      { 
       Console.Write("Enter number {}: ", counter); 
       bool isValid = double.TryParse(Console.ReadLine(), out num); 

       if (isValid == false) 
       { 
        Console.WriteLine("Invalid input!"); 
       } 
       else 
       { 
        numbers.Add(num); 
       } 
     } 

     minNum = numbers.Max(); 
     maxNum = numbers.Min(); 

     Console.WriteLine("The maximal of the numbers is: " + maxNum); 
     Console.WriteLine("The minimal of the numbers is: " + minNum); 
     } 
     else 
     { 
      Console.WriteLine("Invalid input!"); 
     } 
    } 
} 

그것이 다른 블록으로 진행한다 (그래서 예외를 잡는다),하지만 입력이 정수인 경우 I는 처리되지 않은 예외 얻을 : System.FormatException을 : 입력 문자열 형식이 잘못되었다 .

+4

예외는 아마 Console.Write'에 의해 발생합니다 ("수 {} 입력 :"카운터) ' – Lee

+0

당신이 바로 :) –

답변

2

예외가 발생합니다

Console.Write("Enter number {}: ", counter); 

라인, 당신은

Console.Write("Enter number {0}: ", counter); 
+0

+1, 대답 – Habib

+0

을 게시 한 후 귀하의 코멘트를 보았다있어 @Lee 분명히 .. 나는 그것을 어떻게 보지 못했을 까! 아주 어리석은 실수 .. 정말 고마워! –

1

이 오류 메시지의 원인이되는 당신의 형식 문자열의로 변경해야합니다. 괄호 사이에 인덱스를 넣어 : numbers 목록이 비어되기 때문에 사용자는 문자열을 입력하면

Console.Write("Enter number {0}: ", counter); 
0

를 이미 이전 포스터에 의해 고정 된 Console.Write 오류 외에도 여기 System.InvalidOperationException을 얻을 것이다.

minNum = numbers.Max(); 
maxNum = numbers.Min(); 
+0

네가 맞다. minNum = numbers.Max(); maxNum = numbers.Min(); else 블록에. –

관련 문제