Jump to content
  • Advertisement
Sign in to follow this  
TheScriptan

How to handle this problem

This topic is 2153 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

For example I have this code:

Console.Write("Write Your First Number: ");
                num1 = int.Parse(Console.ReadLine()); // If i write here 6/2 or just s,y program frozes and exits. How To Handle that?
                Console.Write("Write Your Operand: ");
                operand = Console.ReadLine(); // If i write here 6/2 or just s,y program frozes and exits. How To handle that
                Console.Write("Write Your Second Number: ");
                num2 = int.Parse(Console.ReadLine()); // If i write here 6/2 or just s,y program frozes and exits. How To Handle That?
                switch (operand) 
                {
                    case "+":
                        answer = num1 + num2;
                        break;
                    case "-":
                        answer = num1 - num2;
                        break;
                    case "*":
                        answer = num1 * num2;
                        break;
                    case "/":
                        answer = num1 / num2;
                        break;
                    default:
                        Console.Clear();
                        Console.WriteLine("You entered wrong operand. Press Any Key To Continue...");
                        Console.ReadLine();
                        Console.Clear();
                        Calc();
                        break;
                }

How can i handle this if switch default is not working? It's just frozes. I just want to make Console.WriteLine("You entered wrong key, try again");

Share this post


Link to post
Share on other sites
Advertisement

It's generally a better idea to use int.TryParse(...) to parse numbers. That function returns false if the parse fails so you can take appropriate action. Only use int.Parse() if you can guarantee that the operation will succeed. In the case of user input, program defensively by using TryParse.

Share this post


Link to post
Share on other sites
There are parsers, i.e. lex and yacc that would help you to create proper parser, but if you want to do it from scratch, all by yourself, then go ahead.

Instead of doing it step by step / token by token, allow user to type if entire formula, i.e. 5+5/2
Then tokenize entered text, by splitting it into functional entities, and verify its structure, rejecting when suspicious.
i.e.
1. 5
2. +
3. 5
4. /
5. 2
(if you want to handle proper operation order, like *, /, +, -, then make sure that you order entities properly. RPN is the best choice of notation, which orders entities in a simple stack format)
then do the operations in the proper order, between the entities.
i.e.
3,4,5: 5 / 2 => 2.5 and gives:
1. 5
2. +
3. 2.5
... etc Edited by Mercile55

Share this post


Link to post
Share on other sites

I would make a loop so that the program continues. Also, if you make functions that will continue to ask for input until the input is valid, you don't really need a default

 

class Program
{
    static int GetOperand(string title)
    {
        int operand;
        while (true)
        {                
            Console.Write(title + "\n> ");
            if (int.TryParse(Console.ReadLine(), out operand))                
                break;                
            else Console.WriteLine("Invalid input. Try again");
        }
        return operand;
    }

    static string GetOperator(string title)
    {
        string op;
        while (true)
        {
            Console.Write(title + "\n> ");
            op = Console.ReadLine();
            if (op == "+" || op == "-" || op == "*" || op == "/")
                break;
            else Console.WriteLine("Invalid input. Try again");
        }
        return op;
    }

    static void Main(string[] args)
    {
        int num1, num2, answer=0;
        string op;
        while (true)
        {
            num1 = GetOperand("Write Your First Number");                                
            op = GetOperator("Write Your Operand");
            num2 = GetOperand("Write Your Second Number");                                
            switch (op)
            {
                case "+":
                    answer = num1 + num2;
                    break;
                case "-":
                    answer = num1 - num2;
                    break;
                case "*":
                    answer = num1 * num2;
                    break;
                case "/":
                    answer = num1 / num2;
                    break;                    
            }
            Console.WriteLine("Answer is " + answer.ToString());
        }
    }
}

 

 

edit: Don't forget to check for division by zero. If the denominator is zero, your program will crash

edit2: For a more flexible design, search for "reverse polish notation", as Mercile55 mentioned

Edited by pulpfist

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!