0

I am doing something where I want a user to be able to enter a number between 0-9 and it spits out the word for it, eg. 1 into one. I am fine with the first part, however, I don't know how to get it so that it tells the user if it has entered an invalid number or letter.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _0_9_output
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Write a number between 0-9: ");
            int number = int.Parse(Console.ReadLine());
            if (number == 0)
            {
                Console.WriteLine("Zero");
            }
            else if (number == 1)
            {
                Console.WriteLine("One");
            }
            else if (number == 2)
            {
                Console.WriteLine("Two");
            }
            else if (number == 3)
            {
                Console.WriteLine("Three");
            }
            else if (number == 4)
            {
                Console.WriteLine("Four");
            }
            else if (number == 5)
            {
                Console.WriteLine("Five");
            }
            else if (number == 6)
            {
                Console.WriteLine("Six");
            }
            else if (number == 7)
            {
                Console.WriteLine("Seven");
            }
            else if (number == 8)
            {
                Console.WriteLine("Eight");
            }
            else if (number == 9)
            {
                Console.WriteLine("Nine");
            }
            else
            {
                (number >= 10);
            }

            {
                Console.Write("That was an invalid statement.");
            }


        }
    }
}

This is one of my first pieces of code so please be generous in giving tips/advice. I am a young programmer and I am only just beginning to learn this in school.

Rand Random
  • 7,300
  • 10
  • 40
  • 88
J. Doc
  • 3
  • 1
  • 7
    `Parse` throws exception on invalid input, but `TryParse` just returns false. Try that. – Dialecticus Feb 19 '18 at 11:51
  • 1
    Or wrap the whole thing in a try/catch. Change your else statement to just have that console.writeline method found underneath, no need for another check as you exhausted the allowed values. – Igor Feb 19 '18 at 11:52
  • @AhmedAbdelhameed - not really as that question does not involve parsing string to integer which is what the OP is really having a problem with. – PaulF Feb 19 '18 at 11:56

3 Answers3

10

I suggest two main things:

  1. Extracting model (i.e. numbers' names) s_Numbers array in the code below
  2. Using int.TryParse instead of Parse (checking for bool is easier in the context than catching exception)

Something like this:

 class Program {
   // Model: numbers' names
   private static string[] s_Numbers = new string[] {
     "Zero", "One", "Two", "Three", "Four",
     "Five", "Six", "Seven", "Eight", "Nine" 
   };

   static void Main(string[] args) {
     Console.Write("Write a number between 0-9: ");

     // cyclomatic complexity reduction (10 ifs dropped), 
     // readability increasing
     //
     // out var number - C# 7.0 construction; if early C# version used:
     //  
     // int number;
     // if (int.TryParse(Console.ReadLine(), out number))  ...
     //
     if (int.TryParse(Console.ReadLine(), out var number)) 
       if (number >= 0 && number <= 9)
         Console.Write(s_Numbers[number]);     // number in [0..9] range 
       else
         Console.Write("Out of [0..9] range"); // number out of range 
     else 
       Console.WriteLine("That was an invalid statement."); // not an integer
   }
 }
Dmitry Bychenko
  • 180,369
  • 20
  • 160
  • 215
-2

You can change your code like below.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _0_9_output
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Write a number between 0-9: ");
            int number = int.Parse(Console.ReadLine());
            if (number == 0)
            {
                Console.WriteLine("Zero");
            }
            else if (number == 1)
            {
                Console.WriteLine("One");
            }
            else if (number == 2)
            {
                Console.WriteLine("Two");
            }
            else if (number == 3)
            {
                Console.WriteLine("Three");
            }
            else if (number == 4)
            {
                Console.WriteLine("Four");
            }
            else if (number == 5)
            {
                Console.WriteLine("Five");
            }
            else if (number == 6)
            {
                Console.WriteLine("Six");
            }
            else if (number == 7)
            {
                Console.WriteLine("Seven");
            }
            else if (number == 8)
            {
                Console.WriteLine("Eight");
            }
            else if (number == 9)
            {
                Console.WriteLine("Nine");
            }
            else
            {
                Console.Write("That was an invalid statement.");
            }

        }
    }
}

if input number isn't between 0-9 last else statement get execute and print message to output.

MohsenTi
  • 361
  • 1
  • 2
  • 17
-2
        static void Main(string[] args)
        {
        string x =  Console.ReadLine();


        try
        {


             if (int.Parse(x) == 0)
        {
            Console.WriteLine("Zero");
        }
        else if (int.Parse(x) == 1)
        {
            Console.WriteLine("One");
        }
        else if (int.Parse(x) == 2)
        {
            Console.WriteLine("Two");
        }
        else if (int.Parse(x) == 3)
        {
            Console.WriteLine("Three");
        }
        else if (int.Parse(x) == 4)
        {
            Console.WriteLine("Four");
        }
        else if (int.Parse(x) == 5)
        {
            Console.WriteLine("Five");
        }
        else if (int.Parse(x) == 6)
        {
            Console.WriteLine("Six");
        }
        else if (int.Parse(x) == 7)
        {
            Console.WriteLine("Seven");
        }
        else if (int.Parse(x) == 8)
        {
            Console.WriteLine("Eight");
        }
        else if (int.Parse(x) == 9)
        {
            Console.WriteLine("Nine");
        }


        }
        catch
        { 
            Console.WriteLine("That was an invalid statement");
        }

    }
kas
  • 129
  • 3
  • 8