This kind of code would normally work in PHP, but since the scope is much more strict in C#, it’s not. I can’t figure out a way to write this code without repeating myself.
static double Cube()
{
Console.Write("Enter the side length of the cube: ");
try
{
double x = Convert.ToDouble(Console.Read());
return Math.Pow(x, 3);
}
catch (FormatException)
{
Console.WriteLine("Invalid input, please enter a number.");
Cube();
}
return 1;
}
..Later in Main():
switch (choice)
{
case 0:
return;
case 1:
double final = Cube();
break;
default:
Console.WriteLine("Please enter 0 or 1.");
Main();
break;
}
Console.WriteLine("The volume is: {0}", Convert.ToString(final));
The Cube() method works fine, but it’s messy in my opinion (return 1 at the end to make the compiler happy). But an error comes up saying The name ‘final’ does not exist in the current context. It can’t find final. So the only way to make this work that I’m seeing is to put the Console.WriteLine statement right after the double final = Cube().
I’ve also tried declaring double final; outside the switch, then just setting final inside each case, but that hasn’t worked either.
Thanks!
If you want to access
finalfrom outside theswitchscope, you’ll have to declare it outside that scope too. If you referencefinaland there are code paths that allow not setting a value tofinal, then the compiler will be “angry”.In php,
finalwould magically be 0 when you don’t assign anything to it. Try declaringfinalbefore the switch, and then assign a value to it at eachcasestatement including thedefaultcase.