First delve into C#

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Complete n00b here, so please bear with me.

I have written the following code and would like to know if it could be
optimised. In particular, I'm reading the user input for the operand into
variable strOperand, and rather than use the IF statement to determine which
operand to use, I'd like to use the variable contents
e.g. dblAnswer = dblFirstNo strOperand dblSecondNo

Also, the While clause at the end...ideally, I would like to write something
like
while (strMore != "y" and strMore !="n")

but I don't know how to do this.

Any help appreciated.


Code ************************************
static void Main(string[] args)
{
//declare the variables to be used with default values
double dblFirstNo = 0, dblSecondNo = 0, dblAnswer = 0;
string strMore = "y", strOperand = "*";

//keep going until the user enters "n"
while (strMore == "y")
{
//get the first number
System.Console.WriteLine("Please enter a number ");
dblFirstNo =

System.Convert.ToDouble(System.Console.ReadLine());

//ask what they want to do with the numbers
System.Console.WriteLine
("Please enter an operand ( * / + -
)");
strOperand =
System.Console.ReadLine();

//get the next number
System.Console.WriteLine("Please enter another number" );
dblSecondNo =

System.Convert.ToDouble(System.Console.ReadLine());

//determine the operand used and perform the calculation
//this isn't ideal either, but I don't know how to use
//the operand as a variable and get it to work as an operand!
if (strOperand == "*")
{
dblAnswer = dblFirstNo * dblSecondNo;
}
else if (strOperand == "/")
{
dblAnswer = dblFirstNo / dblSecondNo;
}
else if (strOperand == "+")
{
dblAnswer = dblFirstNo + dblSecondNo;
}
else if (strOperand == "-")
{
dblAnswer = dblFirstNo - dblSecondNo;
}
//output the sum and the answer
System.Console.WriteLine
("{0} * {1} =
{2}",dblFirstNo,dblSecondNo,dblAnswer);

//ask if the user wants to continue
strMore = "z";
while (strMore == "z")
{
System.Console.WriteLine
("Do you want to
enter more? (y/n)");
strMore = System.Console.ReadLine();
//check to see what the user entered
//was it Y
if (strMore != "y")
{
//nope was it n
if (strMore != "n")
{
//set it to z so the

//system can loop
//ideal...don't think so,

//but it'll do until
//I get more proficient
strMore = "z";
}
}
}
}
}
 
It looks to me like you're expecting the user to follow instructions, and
not make any typos, as your code asks the user to enter a number, and then
parses the string input to a number without checking to see if it is a
number first. In the event that a user enters a non-numeric input, your app
will crash. You need to implement some checking. For example, you could use
System.Double.TryParse to check the input first. Example:

bool isNumeric = false;
double dblFirstNo;
string input;

while (!isNumeric)
{
input = Console.ReadLine();
isNumeric = Double.TryParse(input, out dblFirstNo);
if (!isNumeric)
Console.WriteLine("You did not enter a number. Please enter a number
");
}

See http://msdn2.microsoft.com/en-us/library/system.double.tryparse.aspx
--
HTH,

Kevin Spencer
Microsoft MVP
Chicken Salad Shooter
http://unclechutney.blogspot.com

A man, a plan, a canal, a palindrome that has.. oh, never mind.

Billy said:
Complete n00b here, so please bear with me.

I have written the following code and would like to know if it could be
optimised. In particular, I'm reading the user input for the operand into
variable strOperand, and rather than use the IF statement to determine
which
operand to use, I'd like to use the variable contents
e.g. dblAnswer = dblFirstNo strOperand dblSecondNo

Also, the While clause at the end...ideally, I would like to write
something
like
while (strMore != "y" and strMore !="n")

but I don't know how to do this.

Any help appreciated.


Code ************************************
static void Main(string[] args)
{
//declare the variables to be used with default values
double dblFirstNo = 0, dblSecondNo = 0, dblAnswer = 0;
string strMore = "y", strOperand = "*";

//keep going until the user enters "n"
while (strMore == "y")
{
//get the first number
System.Console.WriteLine("Please enter a number ");
dblFirstNo =

System.Convert.ToDouble(System.Console.ReadLine());

//ask what they want to do with the numbers
System.Console.WriteLine
("Please enter an operand ( * / + -
)");
strOperand =
System.Console.ReadLine();

//get the next number
System.Console.WriteLine("Please enter another number" );
dblSecondNo =

System.Convert.ToDouble(System.Console.ReadLine());

//determine the operand used and perform the calculation
//this isn't ideal either, but I don't know how to use
//the operand as a variable and get it to work as an operand!
if (strOperand == "*")
{
dblAnswer = dblFirstNo * dblSecondNo;
}
else if (strOperand == "/")
{
dblAnswer = dblFirstNo / dblSecondNo;
}
else if (strOperand == "+")
{
dblAnswer = dblFirstNo + dblSecondNo;
}
else if (strOperand == "-")
{
dblAnswer = dblFirstNo - dblSecondNo;
}
//output the sum and the answer
System.Console.WriteLine
("{0} * {1} =
{2}",dblFirstNo,dblSecondNo,dblAnswer);

//ask if the user wants to continue
strMore = "z";
while (strMore == "z")
{
System.Console.WriteLine
("Do you want to
enter more? (y/n)");
strMore = System.Console.ReadLine();
//check to see what the user entered
//was it Y
if (strMore != "y")
{
//nope was it n
if (strMore != "n")
{
//set it to z so the

//system can loop
//ideal...don't think so,

//but it'll do until
//I get more proficient
strMore = "z";
}
}
}
}
}
 
Hi Billy,

I've taken the liberty to rewrite your code, splitting it into several
smaller methods. This makes the code easier to follow. A thumb rule is,
if you can't se the entire method on the screen at the same time, the
method is too long. Your code would have crashed if you entered text or
an invalid operand. Also, a switch is faster and easier to maintain than
if/else if. Default will never happen, but is needed since the compiler
does not know that (or put the return after the switch). Instead of
ReadLine I used a ReadKey for the Y/N and hide the result.


static void Main(string[] args)
{
do
{
Calculate();
}
while (DoContinue());
}

static void Calculate()
{
//declare the variables to be used with default values
double dblFirstNo = 0, dblSecondNo = 0, dblAnswer = 0;
string strOperand = "*";

//get the first number
Console.WriteLine("Please enter a number ");
dblFirstNo = ReadNumber();

//ask what they want to do with the numbers
Console.WriteLine("Please enter an operand ( * / + - )");
strOperand = ReadOperand();

//get the next number
Console.WriteLine("Please enter another number");
dblSecondNo = ReadNumber();

// get the answer
dblAnswer = GetAnswer(dblFirstNo, strOperand, dblSecondNo);

//output the sum and the answer
Console.WriteLine("{0} {1} {2} = {3}", dblFirstNo, strOperand,
dblSecondNo, dblAnswer);
}

static string ReadOperand()
{
string operand = Console.ReadLine();
while (operand != "*" && operand != "/" && operand !="+" &&
operand != "-")
{
Console.WriteLine("Please enter a valid operand");
operand = Console.ReadLine();
}

return operand;
}

static double ReadNumber()
{
double result;
string value = Console.ReadLine();

while (!Double.TryParse(value, out result))
{
Console.WriteLine("Please enter a valid number");
value = Console.ReadLine();
}

return result;
}

static double GetAnswer(double firstNumber, string operand, double
secondNumber)
{
switch (operand)
{
case "*":
return firstNumber * secondNumber;
case "/":
return firstNumber / secondNumber;
case "+":
return firstNumber + secondNumber;
case "-":
return firstNumber - secondNumber;
default:
return Double.NaN;
}
}

static bool DoContinue()
{
//ask if the user wants to continue
Console.WriteLine("Do you want to enter more? (y/n)");

do
{
ConsoleKey k = Console.ReadKey(true).Key;
if (k == ConsoleKey.Y)
return true;
else if(k == ConsoleKey.N)
return false;
else
Console.WriteLine("Please enter Y or N");
}
while (true);
}
 
A perfectly reasonable effort. I've rewritten it and you'll notice I've
not answered your question about "while (strMore !="y" and strMore
!="n")" so I'll do that here.
you would write it as
do
{
stuff
}while(aString != "y" & aString != "n"); use | (pipe) for or.

Here's my effort. I've bunged it in a function and added an enum for
program control. The function is static so you can just paste it into
your app and call it with Calc(); Watch for line wrap :)

private enum PlayAgainOptions
{
invalid, playAgain, exitGame
}

private static void Calc()
{
double firstNo, secondNo, result = 0;
string operand;
PlayAgainOptions playAgain = PlayAgainOptions.invalid;

do
{
System.Console.WriteLine("Please enter a number");
firstNo = double.Parse(System.Console.ReadLine());

System.Console.WriteLine("Please enter another number");
secondNo = double.Parse(System.Console.ReadLine());

System.Console.WriteLine("Please enter an operand ( * / + - )");
operand = System.Console.ReadLine();

switch(operand)
{
case "*":
result = firstNo * secondNo;
break;
case "/":
result = firstNo / secondNo;
break;
case "+":
result = firstNo + secondNo;
break;
case "-":
result = firstNo - secondNo;
break;
default:
// None of the above!
break;
}
// include the operand in the answer
System.Console.WriteLine("{0} {1} {2} = {3}",firstNo, operand,
secondNo, result);

do
{
System.Console.WriteLine("Do you want to enter more? (y/n)");
//convert to lowercase so we capture a Y or N as well.
switch (System.Console.ReadLine().ToLower())
{
case "y":
playAgain = PlayAgainOptions.playAgain;
break;
case "n":
playAgain = PlayAgainOptions.exitGame;
break;
default:
playAgain = PlayAgainOptions.invalid;
break;
}
} while (PlayAgainOptions.invalid == playAgain);

}while(PlayAgainOptions.playAgain == playAgain);
}
}

Complete n00b here, so please bear with me.

I have written the following code and would like to know if it could be
optimised. In particular, I'm reading the user input for the operand into
variable strOperand, and rather than use the IF statement to determine which
operand to use, I'd like to use the variable contents
e.g. dblAnswer = dblFirstNo strOperand dblSecondNo

Also, the While clause at the end...ideally, I would like to write something
like
while (strMore != "y" and strMore !="n")

but I don't know how to do this.

Any help appreciated.


Code ************************************
static void Main(string[] args)
{
//declare the variables to be used with default values
double dblFirstNo = 0, dblSecondNo = 0, dblAnswer = 0;
string strMore = "y", strOperand = "*";

//keep going until the user enters "n"
while (strMore == "y")
{
//get the first number
System.Console.WriteLine("Please enter a number ");
dblFirstNo =

System.Convert.ToDouble(System.Console.ReadLine());

//ask what they want to do with the numbers
System.Console.WriteLine
("Please enter an operand ( * / + -
)");
strOperand =
System.Console.ReadLine();

//get the next number
System.Console.WriteLine("Please enter another number" );
dblSecondNo =

System.Convert.ToDouble(System.Console.ReadLine());

//determine the operand used and perform the calculation
//this isn't ideal either, but I don't know how to use
//the operand as a variable and get it to work as an operand!
if (strOperand == "*")
{
dblAnswer = dblFirstNo * dblSecondNo;
}
else if (strOperand == "/")
{
dblAnswer = dblFirstNo / dblSecondNo;
}
else if (strOperand == "+")
{
dblAnswer = dblFirstNo + dblSecondNo;
}
else if (strOperand == "-")
{
dblAnswer = dblFirstNo - dblSecondNo;
}
//output the sum and the answer
System.Console.WriteLine
("{0} * {1} =
{2}",dblFirstNo,dblSecondNo,dblAnswer);

//ask if the user wants to continue
strMore = "z";
while (strMore == "z")
{
System.Console.WriteLine
("Do you want to
enter more? (y/n)");
strMore = System.Console.ReadLine();
//check to see what the user entered
//was it Y
if (strMore != "y")
{
//nope was it n
if (strMore != "n")
{
//set it to z so the

//system can loop
//ideal...don't think so,

//but it'll do until
//I get more proficient
strMore = "z";
}
}
}
}
}
 
Kevin

I do know about validation and my programs always have it. It's not here
simply because this is THE first program I have ever written in C#, it won't
be used by anyone and I was using it simply to look at functionality, try out
commands etcm, etc.

Rest assured my C# programs will have validation built in.

Thx for taking the time to reply though. You mayconsider me suitably
chastised ;-)
 
Morten

Switch - yes indeed, it is better than if...then...else. Coming from a VB
background, and used to Select Case, I didn't know the syntax for similar
functionality. Thx

Keeping code modular - again, correct and thx for showing me how. I was
wanting to split it down into smaller chunks, but, again coming from VB, I
couldn't work out how to create a method which returns a value...again, thx
for showing me how to.

Thx for taking the time to do this.

Rest assured, I have a book on C# and have only just started it (doing it at
home). I was just trying to write a program at work to try to remember some
of the things from the first two chapters of the book (that I've read so far).

Both your posts were great help

Thx
 
do
{
stuff
}while(aString != "y" & aString != "n"); use | (pipe) for or.

It might be better to use "&&" instead of "&" (and "||" instead of
"|").

From MSDN:
The operation
x && y
corresponds to the operation
x & y
except that if x is false, y is not evaluated (because the result of
the AND operation is false no matter what the value of y may be). This
is known as "short-circuit" evaluation.

Especially if it is called a lot of times and the "y" uses some method
that takes a "long" time to evaluate, this will speed up your program
somewhat.

Hans Kesting
 
One thing I am particularly concerned about is this code here

***********************************************
System.Console.WriteLine("Please enter an operand ( * / + - > )");
strOperand = System.Console.ReadLine();

//get the next number
System.Console.WriteLine("Please enter another number" );
dblSecondNo = System.Convert.ToDouble(System.Console.ReadLine());

//determine the operand used and perform the calculation
//this isn't ideal either, but I don't know how to use
//the operand as a variable and get it to work as an operand!
if (strOperand == "*")
{
dblAnswer = dblFirstNo * dblSecondNo;
}
else if (strOperand == "/")
{
dblAnswer = dblFirstNo / dblSecondNo;
}
else if (strOperand == "+")
{
dblAnswer = dblFirstNo + dblSecondNo;
}
else if (strOperand == "-")
{
dblAnswer = dblFirstNo - dblSecondNo;
}
***********************************************
I am getting the operand into a string (strOperand). Rather than try and
determine the contents of that variable and then perform the calculation be
it through a switch of if..then..else statement, is there no syntax that
allows me to do this

dblAnswer = dblFirstNo strOperand dblsecondNo

So use the variable directly, or the contents of the variable directly
rather than expensive processing alternatives like switch or if..then..else?

Thx
 
Thx DeveloperX...it is very much my first attempt and I plan on getting a
whole lot better.

Thx for the ( | ) in place of or...I forgot (from my dark days in the past
doing Turbo C) about the OR operator.

DeveloperX said:
A perfectly reasonable effort. I've rewritten it and you'll notice I've
not answered your question about "while (strMore !="y" and strMore
!="n")" so I'll do that here.
you would write it as
do
{
stuff
}while(aString != "y" & aString != "n"); use | (pipe) for or.

Here's my effort. I've bunged it in a function and added an enum for
program control. The function is static so you can just paste it into
your app and call it with Calc(); Watch for line wrap :)

private enum PlayAgainOptions
{
invalid, playAgain, exitGame
}

private static void Calc()
{
double firstNo, secondNo, result = 0;
string operand;
PlayAgainOptions playAgain = PlayAgainOptions.invalid;

do
{
System.Console.WriteLine("Please enter a number");
firstNo = double.Parse(System.Console.ReadLine());

System.Console.WriteLine("Please enter another number");
secondNo = double.Parse(System.Console.ReadLine());

System.Console.WriteLine("Please enter an operand ( * / + - )");
operand = System.Console.ReadLine();

switch(operand)
{
case "*":
result = firstNo * secondNo;
break;
case "/":
result = firstNo / secondNo;
break;
case "+":
result = firstNo + secondNo;
break;
case "-":
result = firstNo - secondNo;
break;
default:
// None of the above!
break;
}
// include the operand in the answer
System.Console.WriteLine("{0} {1} {2} = {3}",firstNo, operand,
secondNo, result);

do
{
System.Console.WriteLine("Do you want to enter more? (y/n)");
//convert to lowercase so we capture a Y or N as well.
switch (System.Console.ReadLine().ToLower())
{
case "y":
playAgain = PlayAgainOptions.playAgain;
break;
case "n":
playAgain = PlayAgainOptions.exitGame;
break;
default:
playAgain = PlayAgainOptions.invalid;
break;
}
} while (PlayAgainOptions.invalid == playAgain);

}while(PlayAgainOptions.playAgain == playAgain);
}
}

Complete n00b here, so please bear with me.

I have written the following code and would like to know if it could be
optimised. In particular, I'm reading the user input for the operand into
variable strOperand, and rather than use the IF statement to determine which
operand to use, I'd like to use the variable contents
e.g. dblAnswer = dblFirstNo strOperand dblSecondNo

Also, the While clause at the end...ideally, I would like to write something
like
while (strMore != "y" and strMore !="n")

but I don't know how to do this.

Any help appreciated.


Code ************************************
static void Main(string[] args)
{
//declare the variables to be used with default values
double dblFirstNo = 0, dblSecondNo = 0, dblAnswer = 0;
string strMore = "y", strOperand = "*";

//keep going until the user enters "n"
while (strMore == "y")
{
//get the first number
System.Console.WriteLine("Please enter a number ");
dblFirstNo =

System.Convert.ToDouble(System.Console.ReadLine());

//ask what they want to do with the numbers
System.Console.WriteLine
("Please enter an operand ( * / + -
)");
strOperand =
System.Console.ReadLine();

//get the next number
System.Console.WriteLine("Please enter another number" );
dblSecondNo =

System.Convert.ToDouble(System.Console.ReadLine());

//determine the operand used and perform the calculation
//this isn't ideal either, but I don't know how to use
//the operand as a variable and get it to work as an operand!
if (strOperand == "*")
{
dblAnswer = dblFirstNo * dblSecondNo;
}
else if (strOperand == "/")
{
dblAnswer = dblFirstNo / dblSecondNo;
}
else if (strOperand == "+")
{
dblAnswer = dblFirstNo + dblSecondNo;
}
else if (strOperand == "-")
{
dblAnswer = dblFirstNo - dblSecondNo;
}
//output the sum and the answer
System.Console.WriteLine
("{0} * {1} =
{2}",dblFirstNo,dblSecondNo,dblAnswer);

//ask if the user wants to continue
strMore = "z";
while (strMore == "z")
{
System.Console.WriteLine
("Do you want to
enter more? (y/n)");
strMore = System.Console.ReadLine();
//check to see what the user entered
//was it Y
if (strMore != "y")
{
//nope was it n
if (strMore != "n")
{
//set it to z so the

//system can loop
//ideal...don't think so,

//but it'll do until
//I get more proficient
strMore = "z";
}
}
}
}
}
 
No, you will have to compare against each known operator and thereby
create four different lines of code.
 
As Hans mentioned, the only time you would want to use | instead of || (or
& instead of &&) is when you absolutely need the second statement to be
checked no matter what the first statement returned. For instance

string s = null;

if(s == null | s.Length == 0)
// This will crash since you can't read the Length property of nothing

if(s == null || s.Length == 0)
// This will be ok. Since s == null, s.Length will never be tested

In logic operations you would use | and & though.

int n = 6 | 3;


Thx DeveloperX...it is very much my first attempt and I plan on getting a
whole lot better.

Thx for the ( | ) in place of or...I forgot (from my dark days in the
past
doing Turbo C) about the OR operator.

DeveloperX said:
A perfectly reasonable effort. I've rewritten it and you'll notice I've
not answered your question about "while (strMore !="y" and strMore
!="n")" so I'll do that here.
you would write it as
do
{
stuff
}while(aString != "y" & aString != "n"); use | (pipe) for or.

Here's my effort. I've bunged it in a function and added an enum for
program control. The function is static so you can just paste it into
your app and call it with Calc(); Watch for line wrap :)

private enum PlayAgainOptions
{
invalid, playAgain, exitGame
}

private static void Calc()
{
double firstNo, secondNo, result = 0;
string operand;
PlayAgainOptions playAgain = PlayAgainOptions.invalid;

do
{
System.Console.WriteLine("Please enter a number");
firstNo = double.Parse(System.Console.ReadLine());

System.Console.WriteLine("Please enter another number");
secondNo = double.Parse(System.Console.ReadLine());

System.Console.WriteLine("Please enter an operand ( * / + - )");
operand = System.Console.ReadLine();

switch(operand)
{
case "*":
result = firstNo * secondNo;
break;
case "/":
result = firstNo / secondNo;
break;
case "+":
result = firstNo + secondNo;
break;
case "-":
result = firstNo - secondNo;
break;
default:
// None of the above!
break;
}
// include the operand in the answer
System.Console.WriteLine("{0} {1} {2} = {3}",firstNo, operand,
secondNo, result);

do
{
System.Console.WriteLine("Do you want to enter more? (y/n)");
//convert to lowercase so we capture a Y or N as well.
switch (System.Console.ReadLine().ToLower())
{
case "y":
playAgain = PlayAgainOptions.playAgain;
break;
case "n":
playAgain = PlayAgainOptions.exitGame;
break;
default:
playAgain = PlayAgainOptions.invalid;
break;
}
} while (PlayAgainOptions.invalid == playAgain);

}while(PlayAgainOptions.playAgain == playAgain);
}
}

Complete n00b here, so please bear with me.

I have written the following code and would like to know if it could be
optimised. In particular, I'm reading the user input for the operand into
variable strOperand, and rather than use the IF statement to determine which
operand to use, I'd like to use the variable contents
e.g. dblAnswer = dblFirstNo strOperand dblSecondNo

Also, the While clause at the end...ideally, I would like to write something
like
while (strMore != "y" and strMore !="n")

but I don't know how to do this.

Any help appreciated.


Code ************************************
static void Main(string[] args)
{
//declare the variables to be used with default values
double dblFirstNo = 0, dblSecondNo = 0, dblAnswer = 0;
string strMore = "y", strOperand = "*";

//keep going until the user enters "n"
while (strMore == "y")
{
//get the first number
System.Console.WriteLine("Please enter a number ");
dblFirstNo =

System.Convert.ToDouble(System.Console.ReadLine());

//ask what they want to do with the numbers
System.Console.WriteLine
("Please enter an operand (* / + -
)");
strOperand =
System.Console.ReadLine();

//get the next number
System.Console.WriteLine("Please enter another number" );
dblSecondNo =

System.Convert.ToDouble(System.Console.ReadLine());

//determine the operand used and perform the calculation
//this isn't ideal either, but I don't know how to use
//the operand as a variable and get it to work as an operand!
if (strOperand == "*")
{
dblAnswer = dblFirstNo * dblSecondNo;
}
else if (strOperand == "/")
{
dblAnswer = dblFirstNo / dblSecondNo;
}
else if (strOperand == "+")
{
dblAnswer = dblFirstNo + dblSecondNo;
}
else if (strOperand == "-")
{
dblAnswer = dblFirstNo - dblSecondNo;
}
//output the sum and the answer
System.Console.WriteLine
("{0} * {1} =
{2}",dblFirstNo,dblSecondNo,dblAnswer);

//ask if the user wants to continue
strMore = "z";
while (strMore == "z")
{
System.Console.WriteLine
("Do you want to
enter more? (y/n)");
strMore = System.Console.ReadLine();
//check to see what the user entered
//was it Y
if (strMore != "y")
{
//nope was it n
if (strMore != "n")
{
//set it to z so the

//system can loop
//ideal...don't think so,

//but it'll do until
//I get more proficient
strMore = "z";
}
}
}
}
}
 
Hans said:
It might be better to use "&&" instead of "&" (and "||" instead of
"|").

From MSDN:
The operation
x && y
corresponds to the operation
x & y
except that if x is false, y is not evaluated (because the result of
the AND operation is false no matter what the value of y may be). This
is known as "short-circuit" evaluation.

Especially if it is called a lot of times and the "y" uses some method
that takes a "long" time to evaluate, this will speed up your program
somewhat.

Hans Kesting

Very good point!
 
I've been thinking about the below and it is possible, but it's not
pretty and more effort than it's worth (unless anyone has a simpler
method :)). It's quite interesting though and probably a nice little
proof of concept project.

In dotnet you can use something called reflection to peer in on the
code, dynamically load modules and call functions amongst other things.

You can also use reflection to generate code on the fly. All you would
have to do is generate some source code that included perhaps a static
function on an object that returned the result of dblFirstNo strOperand
dblSecondNo. I.e
return 23 * 23;

If you've done any SQL server work, think of reflection as the dotnet
version of using sysobjects and syscolumns to find out what tables have
what columns.
 
Hi Billy,

*Not* "chastised!" As I didn't know your skill level, other than your
self-description as a "Complete n00b" it was meant as a simple and friendly
instruction/caution.

--
HTH,

Kevin Spencer
Microsoft MVP
Chicken Salad Shooter
http://unclechutney.blogspot.com

A man, a plan, a canal, a palindrome that has.. oh, never mind.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top