943,410 Members | Top Members by Rank

Ad:
  • C++ Discussion Thread
  • Unsolved
  • Views: 8587
  • C++ RSS
May 30th, 2004
0

i want the user to enter an input without obligating him to press enter

Expand Post »
hi , i am doing a project with c++ visual studio 6 and i really want this facility, which is ..
the user will enter a single character or a an integer ,so the compiler will take the input he entered (int or char) without waiting from him to press enter.
i need this facility to make the user browse between pages in my project, so he can use the cursor (" the numbers at right of the keybord")
plzz answer me today
the last day to give our dr the project is tommorow

thnx
bye
Similar Threads
Reputation Points: 10
Solved Threads: 0
Newbie Poster
dooda man is offline Offline
15 posts
since May 2004
May 30th, 2004
0

Re: i want the user to enter an input outhout obligating him to press enter

getch(), mvgetch(), mvwgetch(), ungetch(), wgetch()
get (or push back) characters from curses terminal keyboard
Curses Function
SYNOPSIS DESCRIPTION Function Keys RETURN VALUES NOTES PORTABILITY AVAILABILITY SEE ALSO

--------------------------------------------------------------------------------

SYNOPSIS
#include <curses.h>

int getch(void);

int wgetch(WINDOW *win);

int mvgetch(int y, int x);

int mvwgetch(WINDOW *win, int y, int x);

int ungetch(int ch);

int has_key(int ch);


--------------------------------------------------------------------------------

DESCRIPTION
The
C++ Syntax (Toggle Plain Text)
  1. getch(), wgetch(), mvgetch() and mvwgetch(),
routines read a character from the window. In no-delay mode, if no input is waiting, the value ERR is returned. In delay mode, the program waits until the system passes text through to the program. Depending on the setting of
C++ Syntax (Toggle Plain Text)
  1. cbreak()
, this is after one character (cbreak mode), or after the first newline (nocbreak mode). In half-delay mode, the program waits until a character is typed or the specified timeout has been reached.

If
C++ Syntax (Toggle Plain Text)
  1. noecho()
has been set, then the character will also be echoed into the designated window according to the following rules: If the character is the current erase character, left arrow, or backspace, the cursor is moved one space to the left and that screen position is erased as if
C++ Syntax (Toggle Plain Text)
  1. delch()
had been called. If the character value is any other
C++ Syntax (Toggle Plain Text)
  1. KEY_ define
, the user is alerted with a
C++ Syntax (Toggle Plain Text)
  1. beep()
call. Otherwise the character is simply output to the screen.

If the window is not a pad, and it has been moved or modified since the last call to
C++ Syntax (Toggle Plain Text)
  1. wrefresh(), wrefresh()
will be called before another character is read.

If keypad() is TRUE, and a function key is pressed, the token for that function key is returned instead of the raw characters. Possible function keys are defined in <curses.h> as macros with values outside the range of 8-bit characters whose names begin with KEY_. Thus, a variable intended to hold the return value of a function key must be of short size or larger.

When a character that could be the beginning of a function key is received (which, on modern terminals, means an escape character), curses sets a timer. If the remainder of the sequence does not come in within the designated time, the character is passed through; otherwise, the function key value is returned. For this reason, many terminals experience a delay between the time a user presses the escape key and the escape is returned to the program.

The ungetch() routine places ch back onto the input queue to be returned by the next call to wgetch(). Note that there is, in effect, just one input queue for all windows.

Function Keys
The following function keys, defined in <curses.h>, might be returned by getch() if keypad() has been enabled. Note that not all of these are necessarily supported on any particular terminal.
C++ Syntax (Toggle Plain Text)
  1. Name Key name
  2. ------------------------------------------------------------------
  3. KEY_BREAK Break key
  4. KEY_DOWN The four arrow keys ...
  5. KEY_UP
  6. KEY_LEFT
  7. KEY_RIGHT
  8. KEY_HOME Home key (upward+left arrow)
  9. KEY_BACKSPACE Backspace
  10. KEY_F0 Function keys; space for 64 keys is reserved.
  11. KEY_F(n) For 0<n < 63
  12. KEY_DL Delete line
  13. KEY_IL Insert line
  14. KEY_DC Delete character
  15. KEY_IC Insert char or enter insert mode
  16. KEY_EIC Exit insert char mode
  17. KEY_CLEAR Clear screen
  18. KEY_EOS Clear to end of screen
  19. KEY_EOL Clear to end of line
  20. KEY_SF Scroll 1 line forward
  21. KEY_SR Scroll 1 line backward (reverse)
  22. KEY_NPAGE Next page
  23. KEY_PPAGE Previous page
  24. KEY_STAB Set tab
  25. KEY_CTAB Clear tab
  26. KEY_CATAB Clear all tabs
  27. KEY_ENTER Enter or send
  28. KEY_SRESET Soft (partial) reset
  29. KEY_RESET Reset or hard reset
  30. KEY_PRINT Print or copy
  31. KEY_LL Home down or bottom (lower left). Keypad is
  32. arranged like this:
  33. A1 up A3
  34. left B2 right
  35. C1 down C3
  36. KEY_A1 Upper left of keypad
  37. KEY_A3 Upper right of keypad
  38. KEY_B2 Center of keypad
  39. KEY_C1 Lower left of keypad
  40. KEY_C3 Lower right of keypad
  41. KEY_BTAB Back tab key
  42. KEY_BEG Beg(inning) key
  43. KEY_CANCEL Cancel key
  44. KEY_CLOSE Close key
  45. KEY_COMMAND Cmd (command) key
  46. KEY_COPY Copy key
  47. KEY_CREATE Create key
  48. KEY_END End key
  49. KEY_EXIT Exit key
  50. KEY_FIND Find key
  51. KEY_HELP Help key
  52. KEY_MARK Mark key
  53. KEY_MESSAGE Message key
  54. KEY_MOVE Move key
  55. KEY_NEXT Next object key
  56. KEY_OPEN Open key
  57. KEY_OPTIONS Options key
  58. KEY_PREVIOUS Previous object key
  59. KEY_REDO Redo key
  60. KEY_REFERENCE Ref(erence) key
  61. KEY_REFRESH Refresh key
  62. KEY_REPLACE Replace key
  63. KEY_RESTART Restart key
  64. KEY_RESUME Resume key
  65. KEY_SAVE Save key
  66. KEY_SBEG Shifted beginning key
  67. KEY_SCANCEL Shifted cancel key
  68. KEY_SCOMMAND Shifted command key
  69. KEY_SCOPY Shifted copy key
  70. KEY_SCREATE Shifted create key
  71. KEY_SDC Shifted delete char key
  72. KEY_SDL Shifted delete line key
  73. KEY_SELECT Select key
  74. KEY_SEND Shifted end key
  75. KEY_SEOL Shifted clear line key
  76. KEY_SEXIT Shifted exit key
  77. KEY_SFIND Shifted find key
  78. KEY_SHELP Shifted help key
  79. KEY_SHOME Shifted home key
  80. KEY_SIC Shifted input key
  81. KEY_SLEFT Shifted left arrow key
  82. KEY_SMESSAGE Shifted message key
  83. KEY_SMOVE Shifted move key
  84. KEY_SNEXT Shifted next key
  85. KEY_SOPTIONS Shifted options key
  86. KEY_SPREVIOUS Shifted prev key
  87. KEY_SPRINT Shifted print key
  88. KEY_SREDO Shifted redo key
  89. KEY_SREPLACE Shifted replace key
  90. KEY_SRIGHT Shifted right arrow
  91. KEY_SRSUME Shifted resume key
  92. KEY_SSAVE Shifted save key
  93. KEY_SSUSPEND Shifted suspend key
  94. KEY_SUNDO Shifted undo key
  95. KEY_SUSPEND Suspend key
  96. KEY_UNDO Undo key
The has_key() routine takes a key value from the above list, and returns TRUE or FALSE according as the current terminal type recognizes a key with that value.


--------------------------------------------------------------------------------

RETURN VALUES
All routines return the integer ERR upon failure and an integer value other than ERR (OK in the case of ungetch()) upon successful completion.


--------------------------------------------------------------------------

NOTES
Use of the escape key by a programmer for a single character function is discouraged, as it will cause a delay of up to one second while the keypad code looks for a following function-key sequence.

When using getch(), wgetch(), mvgetch(), or mvwgetch(), nocbreak mode (nocbreak()) and echo mode (echo()) should not be used at the same time. Depending on the state of the tty driver when each character is typed, the program may produce undesirable results.

Note that getch(), mvgetch(), and mvwgetch() may be macros.

Historically, the set of keypad macros was largely defined by the extremely function-key-rich keyboard of the AT&T 7300, aka 3B1, aka Safari 4. Modern personal computers usually have only a small subset of these. IBM PC-style consoles typically support little more than KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_NPAGE, KEY_PPAGE, and function keys 1 through 12. The Ins key is usually mapped to KEY_IC().


--------------------------------------------------------------------------------

PORTABILITY
The get* functions are described in the XSI Curses standard, Issue 4. They read single-byte characters only. The standard specifies that they return ERR on failure, but specifies no error conditions.

The echo behavior of these chars on input of KEY_ or backspace characters was not specified in the SVr4 documentation. This description is adopted from the XSI Curses standard.

The behavior of getch() and friends in the presence of handled signals is unspecified in the SVr4 and XSI Curses documentation. Under historical curses implementations, it varied depending on whether the operating system's implementation of handled signal receipt interrupts a read() call in progress or not, and also (in some implementations) depending on whether an input timeout or nonblocking mode hsd been set. Programmers concerned about portability should be prepared for either of two cases: (a) signal receipt does not interrupt getch(); (b) signal receipt interrupts getch() and causes it to return ERR with errno set to EINTR. Under the ncurses implementation, handled signals never interrupt getch().

The has_key() function is unique to ncurses. We recommend that any code using it be conditionalized on the NCURSES feature macro.


--------------------------------------------------------------------------
Team Colleague
Reputation Points: 55
Solved Threads: 3
Junior Poster
meabed is offline Offline
139 posts
since May 2004
Jun 2nd, 2004
0

Re: i want the user to enter an input without obligating him to press enter

could you give us an example of code that when you press the up arrow it says up, then ends the line and the same for the other three arrows? i just want to see an example really... thanx
Reputation Points: 45
Solved Threads: 0
Light Poster
Bleek is offline Offline
28 posts
since Mar 2004
Jun 2nd, 2004
0

Re: i want the user to enter an input without obligating him to press enter

If you have conio.h...
C++ Syntax (Toggle Plain Text)
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <ctype.h>
  4.  
  5. #define ESC 27
  6. #define UP 72
  7. #define LEFT 75
  8. #define RIGHT 77
  9. #define DOWN 80
  10.  
  11. void foo(const char *prompt)
  12. {
  13. puts(prompt);
  14. for ( ;; )
  15. {
  16. int ch = getch();
  17. switch(ch)
  18. {
  19. case EOF:
  20. case ESC: return;
  21. case UP: puts("UP"); break;
  22. case LEFT: puts("LEFT"); break;
  23. case RIGHT: puts("RIGHT"); break;
  24. case DOWN: puts("DOWN"); break;
  25. default: if(isprint(ch)) putchar(ch); break;
  26. }
  27. }
  28. }
  29.  
  30. int main(void)
  31. {
  32. foo("press a key to test, <esc> to exit");
  33. return 0;
  34. }
Team Colleague
Reputation Points: 2780
Solved Threads: 312
long time no c
Dave Sinkula is offline Offline
4,790 posts
since Apr 2004
Jun 4th, 2004
0

Re: i want the user to enter an input without obligating him to press enter

is it possible you could paste the code for conio.h so i can make the header for it. im working with code warrior and it doesnt have it because it sucks... if you could, thanks...
Reputation Points: 45
Solved Threads: 0
Light Poster
Bleek is offline Offline
28 posts
since Mar 2004
Jun 4th, 2004
0

Re: i want the user to enter an input without obligating him to press enter

A header buys you nothing if you don't have the library it describes.
Team Colleague
Reputation Points: 2780
Solved Threads: 312
long time no c
Dave Sinkula is offline Offline
4,790 posts
since Apr 2004
Jun 5th, 2004
0

Re: i want the user to enter an input without obligating him to press enter

Here an example if u want to learn more tell me
C++ Syntax (Toggle Plain Text)
  1.  
  2. #include <ocurses.h>
  3.  
  4. main()
  5. {
  6. int ch;
  7.  
  8. initscr();
  9. cbreak();
  10. /* Explained later in the section "Input Options" */
  11. addstr("Press any character: ");
  12. refresh();
  13. ch = getch();
  14. printw("\n\n\nThe character entered was a '%c'.\n", ch);
  15. refresh();
  16. endwin();
  17. }
  18.  
  19. The output from this program follows. The first refresh sends the addstr character string from stdscr to the terminal:
  20.  
  21. Press any character: []
  22.  
  23.  
  24.  
  25. Now assume that a w is typed at the keyboard. getch accepts the character and assigns it to ch. Finally, the second refresh is called and the screen appears as follows:
  26.  
  27. Press any character: w
  28.  
  29.  
  30. The character entered was a 'w'.
  31.  
  32.  
  33. $[]
Team Colleague
Reputation Points: 55
Solved Threads: 3
Junior Poster
meabed is offline Offline
139 posts
since May 2004
Jun 7th, 2004
0

Re: i want the user to enter an input without obligating him to press enter

Nevermind, I got it to work perfectly but thank you for the examples...
Reputation Points: 45
Solved Threads: 0
Light Poster
Bleek is offline Offline
28 posts
since Mar 2004

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in C++ Forum Timeline: help with queue plz
Next Thread in C++ Forum Timeline: Help with iteration in 'while' loop





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC