Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Làm sao để bắt phím |^ ( UP_ARROW )

  1. #1
    Ngày gia nhập
    02 2007
    Bài viết
    3

    Mặc định Làm sao để bắt phím |^ ( UP_ARROW )

    Số là em đang cần bắt phím mũi tên lên |^ ( UP_ARROW key ) trong C ( trên môi trường của Linux ).

    Em có 1 file *.txt, trong đó có tầm chục dòng. Chương trình cho phép em chờ. Nếu nhận thấy UP_ARROW key được bấm => mỗi lần em bấm UP_ARROW key thì một lần máy đọc 1 dòng trên file đó rồi print nó lên màn hình.

    Em phải làm thế nào đây, mong các anh giúp đỡ em

  2. #2
    Ngày gia nhập
    02 2007
    Bài viết
    3

    À, luôn tiện mong các anh chỉ cho em cách: làm thế nào để đọc ngược từ cuối file lên, ghi vào 1 file khác ?

  3. #3
    Ngày gia nhập
    01 2009
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi thanhnh Xem bài viết
    Số là em đang cần bắt phím mũi tên lên |^ ( UP_ARROW key ) trong C ( trên môi trường của Linux ).

    Em có 1 file *.txt, trong đó có tầm chục dòng. Chương trình cho phép em chờ. Nếu nhận thấy UP_ARROW key được bấm => mỗi lần em bấm UP_ARROW key thì một lần máy đọc 1 dòng trên file đó rồi print nó lên màn hình.

    Em phải làm thế nào đây, mong các anh giúp đỡ em
    char c=getchar();
    còn muốn bắt phím gì thì bạn tra trong bảng ASCII
    http://vi.wikipedia.org/wiki/ASCII

  4. #4
    Ngày gia nhập
    01 2009
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi thanhnh Xem bài viết
    À, luôn tiện mong các anh chỉ cho em cách: làm thế nào để đọc ngược từ cuối file lên, ghi vào 1 file khác ?
    File nhị phân hay file văn bản,bạn thử tìm hiểu FSEEK có thể đưa con trỏ file đến bất kì vị trí nào,cụ thể thì bạn nên đọc sách,có rất nhiều ebook trên 4r rồi .

  5. #5
    Ngày gia nhập
    12 2008
    Nơi ở
    Bình Dương
    Bài viết
    114

    thank các bạn nhiều lắm~!!!~~~~~~~~~~~~~~~~~~~

  6. #6
    Ngày gia nhập
    02 2007
    Bài viết
    3

    Mặc định Làm sao để bắt phím |^ ( UP_ARROW )

    Trích dẫn Nguyên bản được gửi bởi chk Xem bài viết
    char c=getchar();
    còn muốn bắt phím gì thì bạn tra trong bảng ASCII
    http://vi.wikipedia.org/wiki/ASCII
    Phím Up_ARROW không có trong bảng mã ASCII mà. Nếu dùng hàm c = getchar() hoặc các hàm tương tự khác; khi muốn báo cho máy biết ta đã đọc xong kí tự, phải có phím return ( ENTER ) để báo hiệu. Ở đây, em muốn bắt phím như thế này: Ta gõ a rồi gõ phím space bar, rồi gõ tiếp 1 chữ cái khác ( giả sử chữ ' r ' ) , thì máy sẽ tự hiểu là ta đang có ý định tìm trong 1 file ( file chứa nhiều chuỗi, mỗi chuỗi trên 1 dòng ) ra dòng chuỗi nào bắt đầu bằng chữ cái ' r ' . Sau đó, máy xóa chữ cái ' a ', phím cách và chữ ' r ' đi, thay vào đó bằng chuỗi bắt đầu bằng chữ cái ' r ' vừa tìm được ở trong file kia.

    Help me, please

  7. #7
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Bạn chạy thử cái này nhé!
    C Code:
    1. #include <stdio.h>
    2. #include <windows.h>
    3. #include <conio.h>
    4.  
    5.  
    6. void SetColor(WORD color)
    7. {
    8.     HANDLE hConsoleOutput;
    9.     hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    10.  
    11.     CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;
    12.     GetConsoleScreenBufferInfo(hConsoleOutput, &screen_buffer_info);
    13.  
    14.     WORD wAttributes = screen_buffer_info.wAttributes;
    15.     color &= 0x000f;
    16.     wAttributes &= 0xfff0;
    17.     wAttributes |= color;
    18.  
    19.     SetConsoleTextAttribute(hConsoleOutput, wAttributes);
    20. }
    21.  
    22.  
    23. void clrscr(void)
    24. {
    25.     CONSOLE_SCREEN_BUFFER_INFO  csbiInfo;
    26.     HANDLE  hConsoleOut;
    27.     COORD   Home = {0,0};
    28.     DWORD   dummy;
    29.  
    30.     hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
    31.     GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
    32.  
    33.     FillConsoleOutputCharacter(hConsoleOut,' ',csbiInfo.dwSize.X * csbiInfo.dwSize.Y,Home,&dummy);
    34.    csbiInfo.dwCursorPosition.X = 0;
    35.    csbiInfo.dwCursorPosition.Y = 0;
    36.    SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
    37. }
    38.  
    39. void menu1()
    40. {
    41.     SetColor(8);printf("\n1.Lua chon 1.");
    42.     SetColor(15);printf("\n2.Lua chon 2.");
    43.     printf("\n3.Lua chon 3.");
    44.     printf("\n4.Lua chon 4.");
    45.     printf("\n5.Thoat.\n");
    46. }
    47. void menu2()
    48. {
    49.     printf("\n1.Lua chon 1.");
    50.     SetColor(8);printf("\n2.Lua chon 2.");
    51.     SetColor(15);printf("\n3.Lua chon 3.");
    52.     printf("\n4.Lua chon 4.");
    53.     printf("\n5.Thoat.\n");
    54. }
    55. void menu3()
    56. {
    57.     printf("\n1.Lua chon 1.");
    58.     printf("\n2.Lua chon 2.");
    59.     SetColor(8);printf("\n3.Lua chon 3.");
    60.     SetColor(15);printf("\n4.Lua chon 4.");
    61.     printf("\n5.Thoat.\n");
    62. }
    63. void menu4()
    64. {
    65.     printf("\n1.Lua chon 1.");
    66.     printf("\n2.Lua chon 2.");
    67.     printf("\n3.Lua chon 3.");
    68.     SetColor(8);printf("\n4.Lua chon 4.");
    69.     SetColor(15);printf("\n5.Thoat.\n");
    70. }
    71. void menu5()
    72. {
    73.     printf("\n1.Lua chon 1.");
    74.     printf("\n2.Lua chon 2.");
    75.     printf("\n3.Lua chon 3.");
    76.     printf("\n4.Lua chon 4.");
    77.     SetColor(8);printf("\n5.Thoat.\n");
    78.     SetColor(15);
    79. }
    80.  
    81. int main()
    82. {
    83.     int i=1;
    84.     char c;
    85.     do{
    86.         clrscr();
    87.         switch (i)
    88.         {
    89.             case 1:menu1();break;
    90.             case 2:menu2();break;
    91.             case 3:menu3();break;
    92.             case 4:menu4();break;
    93.             case 5:menu5();break;
    94.         }
    95.         c=getch();
    96.         if (c==80 && i<5)i++;  //nhan mui ten xuong
    97.         if (c==72 && i>1)i--;  //nhan mui ten len
    98.       } while (c!=13);
    99.     if (i==5)exit(0);
    100.     printf("\n\nDong ban chon la: \n");
    101.     switch (i)
    102.         {
    103.             case 1:printf("\n1.Lua chon 1.");break;
    104.             case 2:printf("\n2.Lua chon 2.");break;
    105.             case 3:printf("\n3.Lua chon 3.");break;
    106.             case 4:printf("\n4.Lua chon 4.");break;
    107.             case 5:printf("\n5.Thoat.\n");break;
    108.         }
    109.     printf("\n");
    110.     getch();
    111. }

    Chú ý đoạn này nè
    Code:
    c=getch();
            if (c==80 && i<5)i++;  //nhan mui ten xuong
            if (c==72 && i>1)i--;  //nhan mui ten len
    Ah, lúc đó mình dùng compiler Dev C++, sửa chút có thể compiler codeblock, VC++. Không dùng compiler for dos.

    Hoặc bạn có thể dùng các define này cũng đc
    KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT

  8. #8
    Ngày gia nhập
    02 2007
    Bài viết
    3

    Cảm ơn Hoàng nhiều nhé. Mình sẽ gắng tìm hiểu và áp dụng

  9. #9
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,006

    Trích dẫn Nguyên bản được gửi bởi thanhnh Xem bài viết
    Số là em đang cần bắt phím mũi tên lên |^ ( UP_ARROW key ) trong C ( trên môi trường của Linux ).

    Em có 1 file *.txt, trong đó có tầm chục dòng. Chương trình cho phép em chờ. Nếu nhận thấy UP_ARROW key được bấm => mỗi lần em bấm UP_ARROW key thì một lần máy đọc 1 dòng trên file đó rồi print nó lên màn hình.

    Em phải làm thế nào đây, mong các anh giúp đỡ em
    Các phím điều khiển ko phải là 1 mã đơn thuần như a , b, c ... mà nó là 2 mã đi kèm nhau. chúng ta hiểu thế này nhé.

    khi ta ấn "a" thì sẽ send vào mã của kí tự a. Trong bảng mã thì full rồi lấy đâu ra mã để nó hiểu là kí tự điểu khiển ???? vậy nó sẽ phải thêm số thôi.

    khi ta ấn 1 kí tự điều khiển ví dụ lên, xuống , alt + x , alt +f4.... thì nó sẽ send vào trong stdin 2 mã số. số thứ nhất là 0 và 1 số đính kèm....


    bạn có thể xem đoạn code sau :

    PHP Code:
    ch1=getch();
    if (
    ch1==0ch2=getch(); 
    đó như thế mới bắt được phím mũi tên .....
    ch1 và ch2 là bộ 2 số mã của phím mũi tên

    (đang bận nên chỉ giải thích qua qua được thôi hơi khó hiểu cố mà hiểu nha ...)
    ^_,^

    Tổng hợp các câu chuyện hài hước vui nhộn, sử dụng Speech Synthesis để đọc : https://www.youtube.com/channel/UCLk...Tjrg/playlists


    Bùi Tấn Quang

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn