Jump to content

C++ Key Detection

anagiotis567

So I was wondering how to detect a pressed key instead of the user having to press enter evey time an input is needed.The following code is just a simple up to 5-digit calculator i made.It's not perfect but its something.

#include <iostream>int main(){//all variableschar Selection1;char Selection2;char Selection3;char Selection4;char Selection5;char Selection6;char Selection7;char Selection8;char Selection9;char Selection10;char Selection1d;char Selection2d;char Selection3d;float Number1;float Number2;float Number3;float Number4;float Number5;float Number6;float Number7;float Number8;float Number9;float Number10;double Number1d;double Number2d;double Number3d;double Number4d;double Number5d;double Number6d;double Number7d;double Number8d;double Number9d;double Number10d;float result;    std::cout<<"__________Calculator_________\n";    std::cout<<"Welcome To My New Calculator.\n";    std::cout<<"1     Addition\n"<<"2     Subtraction\n"<<"3     Division\n"<<"4     Multiplication\n\n";    std::cin>>Selection1;    if(Selection1 == '1')    {        std::cout<<"You Selected Addition.\n";        std::cout<<"Please Enter The First Number.\n";        std::cin>>Number1;        std::cout<<"Please Enter The Second Number.\n";        std::cin>>Number2;        std::cout<<"Do You Want To Add Another Number?\n";        std::cout<<"Please Answer Y or N.\n";        std::cin>>Selection2;        if(Selection2 == 'Y' or Selection2 == 'y')        {            std::cout<<"Please Enter The Third Number.\n";            std::cin>>Number3;            result = Number1 + Number2 + Number3;            std::cout<<"Do You Want To Add Another Number?\n";            std::cout<<"Please Answer Y or N.\n";            std::cin>>Selection3;        }        else if(Selection2 == 'N' or Selection2 == 'n')        {            result=Number1+Number2;            std::cout<< Number1<<'+'<< Number2<<'=';            std::cout<< result;            return 0;        }        if(Selection3 == 'Y' or Selection3 == 'y')            {            std::cout<<"Please Enter The Fourth Number\n";            std::cin>>Number4;            std::cout<<"Do You Want To Add Another Number?\n";            std::cout<<"Please Answer Y or N.\n";            std::cin>>Selection4;            }            else if (Selection3 == 'N' or Selection3 == 'n')        {            result = Number1 + Number2 + Number3;            std::cout<< Number1<<'+'<< Number2<<'+'<< Number3<<'=';            std::cout<<result;            return 0;        }         if(Selection4 == 'Y' or Selection4 == 'y' )         {            std::cin>>Number5;            result = Number1 + Number2 + Number3 + Number4 + Number5;            std::cout<< Number1<<'+'<< Number2<<'+'<< Number3<<'+'<<Number4<<'+'<<Number5<<'=';            std::cout<<result;            return 0;         }    if(Selection4 == 'N' or Selection4 == 'n' )            {            result = Number1 + Number2 + Number3 + Number4;            std::cout<< Number1<<'+'<< Number2<<'+'<< Number3<<'=';            std::cout<<result;            return 0;            }        }    else if(Selection1 == '2')    {        std::cout<<"You Selected Subtraction.\n";        std::cout<<"Please Enter The First Number.\n";        std::cin>>Number6;        std::cout<<"Please Enter The Second Number.\n";        std::cin>>Number7;        std::cout<<"Do You Want To Subtract Another Number?\n";        std::cout<<"Please Answer Y or N.\n";        std::cin>>Selection5;        if(Selection5 == 'Y' or Selection5 == 'y')        {            std::cout<<"Please Enter The Third Number.\n";            std::cin>>Number8;            result = Number6 - Number7 - Number8;            std::cout<<"Do You Want To Subtract Another Number?\n";            std::cout<<"Please Answer Y or N.\n";            std::cin>>Selection6;        }        else if(Selection5 == 'N' or Selection5 == 'n')        {            result=Number6 - Number7;            std::cout<< Number6<<'-'<< Number7<<'=';            std::cout<< result;            return 0;        }        if(Selection6 == 'Y' or Selection6 == 'y')            {            std::cout<<"Please Enter The Fourth Number\n";            std::cin>>Number9;            std::cout<<"Do You Want To Subtract Another Number?\n";            std::cout<<"Please Answer Y or N."<<std::endl;            std::cin>>Selection7;            }            else if (Selection6 == 'N' or Selection6 == 'n')        {            result=Number6 - Number7 - Number8 - Number9;            std::cout<< Number6<<'-'<< Number7<<'-'<< Number8<<'-'<< Number9<<'=';            std::cout<<result;            return 0;        }         if(Selection7 == 'Y' or Selection7 == 'y')         {            std::cin>>Number10;            result = Number6 - Number7 - Number8 - Number9 - Number10;            std::cout<< Number6<<'-'<< Number7<<'-'<< Number8<<'-'<<Number9<<'-'<<Number10<<'=';            std::cout<<result;            return 0;         }    else if(Selection7 == 'N' or Selection7 == 'n')         {            result = Number6 - Number7 - Number8 - Number9;            std::cout<< Number6<<'-'<< Number7<<'-'<< Number8<< Number9<<'=';            std::cout<<result;            return 0;            }    }    else if(Selection1 == '3')    {        std::cout<<"You Selected Division."<<std::endl;        std::cout<<"Please Enter The First Number.\n";        std::cin>>Number1d;        std::cout<<"Please Enter The Second Number.\n";        std::cin>>Number2d;        std::cout<<"Do You Want To Divide Another Number?\n";        std::cout<<"Please Answer Y or N.\n";        std::cin>>Selection8;        if(Selection8 == 'Y' or Selection8 == 'y')        {            std::cout<<"Please Enter The Third Number.\n";            std::cin>>Number3d;            result=Number1d / Number2d / Number3d;            std::cout<<"Do You Want To Divide Another Number?\n";            std::cout<<"Please Answer Y or N.\n";            std::cin>>Selection9;        }    else if(Selection8 == 'N' or Selection8 == 'n')    {            result = Number1d / Number2d;            std::cout<< Number1d<<'/'<< Number2d<<'=';            std::cout<<result;            return 0;    }    if(Selection9 == 'Y' or Selection9 == 'y')    {        std::cout<<"Please Enter The Fourth Number.\n";        std::cin>>Number4d;        result=Number1d / Number2d / Number3d / Number4d;        std::cout<<result;        std::cout<<"Do You Want To Divide Another Number?\n";        std::cout<<"Please Answer Y or N.\n";        std::cin>>Selection10;    }    else if(Selection9 == 'N' or Selection9 == 'n')    {        result=Number1d / Number2d / Number3d;        std::cout<< Number1d<<'/'<< Number2d<<'/'<<Number3d<<'=';        std::cout<<result;        return 0;    } if(Selection10 == 'Y' or Selection10 == 'y')  {     std::cout<<"Please Enter The Fifth Number.\n";     std::cin>>Number5d;     result=Number1d/Number2d/Number3d/Number4d/Number5d;     std::cout<<Number1d<<'/'<< Number2d<<'/'<<Number3<<'/'<<Number4d<<'/'<<Number5d;     std::cout<<result;     return 0;  } else if(Selection10 == 'N' or Selection10 == 'n')   {        result=Number1d/Number2d/Number3d/Number4d;        std::cout<< Number1d<<'/'<< Number2d<<'/'<<Number3d<<'/'<<Number4d<<'=';        std::cout<<result;        return 0;   }  }    else if (Selection1 == '4')    {        std::cout<<"You Selected Multiplication.\n";        std::cout<<"Please Enter The First Number.\n";        std::cin>>Number6d;        std::cout<<"Please Enter The Second Number.\n";        std::cin>>Number7d;        std::cout<<"Do You Want To Multiply Another Number?\n";        std::cout<<"Please Answer Y or N.\n";        std::cin>>Selection1d;        if(Selection1d == 'Y' or Selection1d == 'y')        {            std::cout<<"Please Enter The Third Number.\n";            std::cin>>Number8d;            result=Number6d * Number7d * Number8d;            std::cout<<"Do You Want To Multiply Another Number?\n";            std::cout<<"Please Answer Y or N.\n";            std::cin>>Selection2d;        }    else if(Selection1d == 'N' or Selection1d == 'n')    {            result = Number6d * Number7d;            std::cout<< Number6d<<'*'<< Number7d<<'=';            std::cout<<result;            return 0;    }    if(Selection2d == 'Y' or Selection2d == 'y')    {        std::cout<<"Please Enter The Fourth Number.\n";        std::cin>>Number9d;        std::cout<<"Do You Want To Multiply Another Number?\n";        std::cout<<"Please Answer Y or N.\n";        std::cin>>Selection3d;    }    else if(Selection2d == 'N' or Selection2d == 'n')    {        result=Number6d * Number7d * Number8d;        std::cout<<Number6d<<'*'<<Number7d<<'*'<<Number8d<<'=';        std::cout<<result;        return 0;    } if(Selection3d == 'Y' or Selection3d == 'y')  {     std::cout<<"Please Enter The Fifth Number.\n";     std::cin>>Number10d;     result=Number6d * Number7d * Number8d * Number9d * Number10d;     std::cout<<Number6d<<'*'<< Number7d<<'*'<<Number8d<<'*'<<Number9d<<'*'<<Number10d<<'=';     std::cout<<result;     return 0;  } else if(Selection3d == 'N' or Selection3d == 'n')   {        result=Number6d * Number7d * Number8d * Number9d;        std::cout<< Number6d<<'*'<< Number7d<<'*'<<Number8d<<'*'<<Number9d<<'=';        std::cout<<result;        return 0;   }  } }
Link to comment
Share on other sites

Link to post
Share on other sites

 

So I was wondering how to detect a pressed key instead of the user having to press enter evey time an input is needed.The following code is just a simple up to 5-digit calculator i made.It's not perfect but its something.


I'm confused. You want user input without the user inputing anything?

Did my post help you? Then make sure to rate it!

Check out my post on symbolic links! || PSU ranking and tiers || Pokemon Thread

 

Link to comment
Share on other sites

Link to post
Share on other sites

I don't really understand why you would want to do that, but there you go:

conio.h has a getch() function that does exactly what you want.

#include <conio.h>#include <iostream>int main(){    char key=' ';    key = getch();    std::cout << key;    return 0;}

That is really simple and easy to handle. You could also use Events, but that's a lot more complicated.You might also want to check if the user actually inputs anything with kbhit().

 

Also, why so many variables. Jeez D:.

@anagiotis567 follow your topics.

i5 4670k @ 4.2GHz (Coolermaster Hyper 212 Evo); ASrock Z87 EXTREME4; 8GB Kingston HyperX Beast DDR3 RAM @ 2133MHz; Asus DirectCU GTX 560; Super Flower Golden King 550 Platinum PSU;1TB Seagate Barracuda;Corsair 200r case. 

Link to comment
Share on other sites

Link to post
Share on other sites

you should use arrays and some loops and your code will be much shorter!

CPU: r7 2700x;  GPU: EVGA GTX 980 ti sli; RAM: 16GB DDR4; MoBo: ASUS CH VII HERO x470; PSU: Seasonic Prime 850 Titanium; Case: Be Quiet! Dark Base 900 PRO; SSD: Kingston 120 GB; HDD: 1x 500 GB 1x 2TB 1x 3TB;

 

My Anime List 300+ completed

Link to comment
Share on other sites

Link to post
Share on other sites

If your on Windows you could use Win32 with your wndproc registering key up and key down messages.

CPU: Intel i7 - 5820k @ 4.5GHz, Cooler: Corsair H80i, Motherboard: MSI X99S Gaming 7, RAM: Corsair Vengeance LPX 32GB DDR4 2666MHz CL16,

GPU: ASUS GTX 980 Strix, Case: Corsair 900D, PSU: Corsair AX860i 860W, Keyboard: Logitech G19, Mouse: Corsair M95, Storage: Intel 730 Series 480GB SSD, WD 1.5TB Black

Display: BenQ XL2730Z 2560x1440 144Hz

Link to comment
Share on other sites

Link to post
Share on other sites

I would just suggest using the Ncurses library...

 

http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html

 

Use that guide

 

and here is the Windows version

 

http://pdcurses.sourceforge.net/

[ Cruel Angel ]:     Exterior  -   BENQ XL2420T   |   SteelSeries MLG Sensei   |   Corsair K70 RED   |   Corsair 900D  |                                                                                                    CPU:    -   4.7Ghz @ 1.425v             |

                             Interior    -   i7 4770k   |    Maximus VI Formula    |   Corsair Vengeance Pro 16GB    |   ASUS GTX 980 Strix SLIx2  |  840 Pro 512Gb    |    WD Black 2TB  |           RAM:   -   2400Mhz OC @ 1.650v    |

                             Cooling   -   XSPC 120mm x7 Total Radiator Space   |   XSPC RayStorm    |    PrimoChill Tubing/Res  |                                                                                             GPU:   -   1000Mhz @ 1.158            |

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×