1. Advertising
    y u no do it?

    Advertising (learn more)

    Advertise virtually anything here, with CPM banner ads, CPM email ads and CPC contextual links. You can target relevant areas of the site and show ads based on geographical location of the user if you wish.

    Starts at just $1 per CPM or $0.10 per CPC.

[C] Function keys

Discussion in 'Programming' started by Alhazred, Aug 7, 2004.

  1. #1
    
    char * UserInput(int max) {
      BOOL EndInput = TRUE;
      unsigned int Count;
      int Count2 = 0, Count3 = 0, cursore = 0;
      char AllowedCh[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', '\0'};
      char AllowedNum[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '\0'};
      char *Buff;
      char Current = ' ';
      char provvisorio[2];
      char *definitivo;
    
      Buff = (char *) malloc((max + 1));
      definitivo = (char *) malloc((max + 1));
      Buff[0] = '\0';
      definitivo[0] = '\0';
    
      while(EndInput)
      {
          provvisorio[Count3] = getch();
          definitivo = strupr(provvisorio);
          definitivo[Count3 + 1] = '\0';
          Current = definitivo[Count3];
          switch(Current)
          {
             case 13: EndInput = FALSE;
                      Buff[Count2] = '\0';
                      break;
    
             case 8: Buff[Count2] = '\0';
                     if(cursore > 0)
                     {
                       printf("\b \b");
                       Count2--;
                       Buff[Count2] = '\0';
                       cursore--;
                     }
                     break;
    
             /*function keys exclusion*/
             case(0+65): break;
             case(0+66): break;
             case(0+67): break;
             case(0+68): break;
             case(0+69): break;
             case(0+70): break;
             case(0+71): break;
             case(0+72): break;
             case(0+73): break;
             case(0+74): break;
             /****************/
    
             default: if(max == 1)
                      {
                          for(Count = 0; Count < strlen(AllowedCh); Count++)
                          {
                             if(Current == AllowedCh[Count] && (Count2 < max))
                             {
                                 printf("%c", Current);
                                 Buff[Count2] = Current;
                                 Count2++;
                                 cursore++;
                              }
                          }
                          break;
                      }
                      else
                      {
                          for(Count = 0; Count < strlen(AllowedNum); Count++)
                          {
                             if(Current == AllowedNum[Count] && (Count2 < max))
                             {
                                 printf("%c", Current);
                                 Buff[Count2] = Current;
                                 Count2++;
                                 cursore++;
                             }
                          }
                          break;
                      }
          }
      }
      return Buff;
    } //End UserInput
    
    Code (markup):
    I have a problem with this code, if I press F7, F8, F9, F10, pagup, home introduce valid character for input.
    Well have you some suggestion about how to recognize if a function key or a char key is pressed and accept only the chars?
    How to do in my code?

    Example, if I press F7 it will input A. I don't want this!
     
    Alhazred, Aug 7, 2004 IP
  2. msaad

    msaad Peon

    Messages:
    120
    Likes Received:
    2
    Best Answers:
    0
    Trophy Points:
    0
    #2
    Hmm.. If i remember correctly, when getch() is used, function keys send two codes instead of one. First a 0 is returned from getch() (which is an indication this is an extended key), and then a special code is returned (which causes the A to be printed).

    So, all you need to do is make a check that if getch() returns a zero, then call it again to get the actual code of the key.
     
    msaad, Aug 26, 2004 IP