0

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.

Beatris Boneva
  • 40
  • 1
  • 1
  • 4
  • 4
    The exception is probably thrown by `Console.Write("Enter number {}: ", counter);` – Lee Nov 28 '13 at 20:23

3 Answers3

3

The line

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

will throw an exception, you should change it to

Console.Write("Enter number {0}: ", counter);
Lee
  • 142,018
  • 20
  • 234
  • 287
1

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

Console.Write("Enter number {0}: ", counter);
Guffa
  • 687,336
  • 108
  • 737
  • 1,005
0

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();
Inisheer
  • 20,376
  • 9
  • 50
  • 82