C# Why I get "Unhandled Exception: System.FormatException: Input string was not in a correct format." when I use TryParse?

StackOverflow https://stackoverflow.com/questions/20274189

  •  06-08-2022
  •  | 
  •  

Question

I get "Unhandled Exception: System.FormatException: Input string was not in a correct format." but actually I catch the Exception with 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!");
        }
    }
}

When the input is string it goes to the else block(so it catches the exception), but when the input is an integer I get Unhandled Exception: System.FormatException: Input string was not in a correct format.

Was it helpful?

Solution

The line

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

will throw an exception, you should change it to

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

OTHER TIPS

It's your format string that is causing the error message. Put an index between the brackets:

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

In addition to the Console.Write error already fixed by previous posters, you will also get a System.InvalidOperationException here if the user enters only strings because numbers list will be empty.

minNum = numbers.Max();
maxNum = numbers.Min();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top