Jump to content

  • Log In with Google      Sign In   
  • Create Account

How to handle this problem


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 TheScriptan   Members   -  Reputation: 207

Like
0Likes
Like

Posted 21 January 2013 - 10:45 AM

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");


Check out my blog or twitter for news how I am doing in the project "Learn Programming in 2 Years!". You can follow my progress, and help me! :)

 

My Projects:

              "Learn Programming In 2 Years"

              "Windows Tutorials"

              "Ubuntu Tutorials"

 

My Games:

              Moving@ IndieDB: http://www.indiedb.com/games/moving-rl

 

My Links:

              My Blog: http://www.thescriptan.blogspot.com

              My Twitter: https://twitter.com/TheScriptan


Sponsor:

#2 Zaoshi Kaba   Crossbones+   -  Reputation: 4574

Like
1Likes
Like

Posted 21 January 2013 - 10:50 AM

Most likely it throws exception, you'll have to use try{} catch{} block.



#3 TheScriptan   Members   -  Reputation: 207

Like
0Likes
Like

Posted 21 January 2013 - 11:09 AM

I will try, but i don't know much about try{} and catch{}


Check out my blog or twitter for news how I am doing in the project "Learn Programming in 2 Years!". You can follow my progress, and help me! :)

 

My Projects:

              "Learn Programming In 2 Years"

              "Windows Tutorials"

              "Ubuntu Tutorials"

 

My Games:

              Moving@ IndieDB: http://www.indiedb.com/games/moving-rl

 

My Links:

              My Blog: http://www.thescriptan.blogspot.com

              My Twitter: https://twitter.com/TheScriptan


#4 BarrySkellern   Members   -  Reputation: 750

Like
1Likes
Like

Posted 21 January 2013 - 11:49 AM

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.


Visit http://www.mugsgames.com - Just released: Stroids, a retro style mini-game for Windows PC.

Mugs Games on Twitter: @MugsGames and Facebook: www.facebook.com/mugsgames

Me on Twitter @BarrySkellern

 


#5 Mercile55   Members   -  Reputation: 136

Like
0Likes
Like

Posted 21 January 2013 - 06:06 PM

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, 21 January 2013 - 06:07 PM.


#6 pulpfist   Members   -  Reputation: 528

Like
0Likes
Like

Posted 22 January 2013 - 05:05 AM

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, 22 January 2013 - 07:53 AM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS