Home > Software design >  C# does not recognize a variable
C# does not recognize a variable

Time:04-05

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

namespace school_project_final
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("who are you...?");
            
            string name = Console.ReadLine();

            Console.WriteLine("how old are you "   name   "?");

            int age;

            try
            {
                age = Convert.ToInt32(Console.ReadLine());
            }
            catch (FormatException)
            {
                Console.WriteLine("that's... not a number");
                return; 
            }
            finally
            {
                if (System.Convert.ToInt32(age) >= 18)
                {
                    Console.WriteLine("so you're "   age   " years old, good to know");
                }
                else if (System.Convert.ToInt32(age) < 18 && System.Convert.ToInt32(age) > 0)
                {
                    Console.WriteLine("so you're a child, how worthless");
                }

                Console.ReadLine();
            }
        }
    }
}

if (System.Convert.ToInt32(age) >= 18)

This line returns an error that the age variable does not exist, but the other lines after it like

Console.WriteLine("so you're "   age   " years old, good to know");

and

else if (System.Convert.ToInt32(age) < 18 && 
         System.Convert.ToInt32(age) > 0)

do not return this error, how do I fix this?

CodePudding user response:

finally always runs after try/catch, even if there's an execption That's why compiler doesn't think there's a value for age

Add your if/else statements in try block

try
{
    age = Convert.ToInt32(Console.ReadLine());
    
    if (age >= 18) 
    {
        Console.WriteLine("so you're "   age   " years old, good to know");
    } 
    else if (age < 18 && age > 0) 
    {
        Console.WriteLine("so you're a child, how worthless");
    }

    Console.ReadLine();
}
catch (FormatException)
{
     Console.WriteLine("that's... not a number");
     return; 
}

CodePudding user response:

The compiler thinks the age value is not assigned in the finally block because it's scope is evaluated regardless of the try block successfully running. In other words, if you got an exception, the finally block wouldn't have any value of age unless you assigned it to something else in the catch.

Your if/else statements should be in the try block

  •  Tags:  
  • c#
  • Related