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

Đề tài: Cách sử dụng phím chức năng trong lập trình C?

  1. #1
    Ngày gia nhập
    03 2011
    Bài viết
    4

    Mặc định Cách sử dụng phím chức năng trong lập trình C?

    Chẳng là em vừa mới học lập trình C. Em đang định viết một chương trình để tạo một file văn bản bằng cách nhập dữ liệu vào từ bàn phím rồi ghi vào một tệp tạm. Khi mình ấn phím F2 thì sẽ tạo một file với tên và đường dẫn do mình chọn. Nhưng em không biết làm cách nào để sử dụng phím F2. ngày xưa em chỉ từng viết là ấn 2 phím Enter liên tiếp thì ngừng nhập dữ liệu và kết thúc thôi. Nay em muốn chuyển sang các Phím F. Mong các anh chị giúp em với.

  2. #2
    Ngày gia nhập
    12 2011
    Nơi ở
    /dev/mem
    Bài viết
    6

    Trích dẫn Nguyên bản được gửi bởi kaiya92 Xem bài viết
    Chẳng là em vừa mới học lập trình C. Em đang định viết một chương trình để tạo một file văn bản bằng cách nhập dữ liệu vào từ bàn phím rồi ghi vào một tệp tạm. Khi mình ấn phím F2 thì sẽ tạo một file với tên và đường dẫn do mình chọn. Nhưng em không biết làm cách nào để sử dụng phím F2. ngày xưa em chỉ từng viết là ấn 2 phím Enter liên tiếp thì ngừng nhập dữ liệu và kết thúc thôi. Nay em muốn chuyển sang các Phím F. Mong các anh chị giúp em với.
    - Bạn dùng winform hay console?

    Nếu là console thì _getch() bắt được mà, sau đó xử lý thôi.
    Nếu là winform thì bắt sự kiện WM_KEYDOWN hay WM_KEYUP.

  3. #3
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi kaiya92 Xem bài viết
    Chẳng là em vừa mới học lập trình C. Em đang định viết một chương trình để tạo một file văn bản bằng cách nhập dữ liệu vào từ bàn phím rồi ghi vào một tệp tạm. Khi mình ấn phím F2 thì sẽ tạo một file với tên và đường dẫn do mình chọn. Nhưng em không biết làm cách nào để sử dụng phím F2. ngày xưa em chỉ từng viết là ấn 2 phím Enter liên tiếp thì ngừng nhập dữ liệu và kết thúc thôi. Nay em muốn chuyển sang các Phím F. Mong các anh chị giúp em với.
    mình đoán bạn lập trình console
    thông thường với các phím chức năng như F1, F2 .. hoặc các phím đặc biệt khác, người ta sử dụng scancode để phát hiện phím này có được nhấn hay không

    với C, có 1 cách đơn giản là dùng getch, khi đó mã đầu tiên trả về là 0 ( trong 1 số hệ thống là 224), mã thứ 2 là code của phím được ấn. bạn có thể dùng code sau để thử. Nếu giá trị trả về > 256 tức là phím đặc biệt

    trong trường hợp getch trả về 0 thì mã nằm ở stdin, bạn dùng getch lần nữa đê lấy nội dung
    C Code:
    1. int get_code ( void )
    2. {
    3.   int ch = getch();
    4.  
    5.   if ( ch == 0 || ch == 224 )
    6.     ch = 256 + getch();
    7.  
    8.   return ch;
    9. }

  4. #4
    Ngày gia nhập
    03 2011
    Bài viết
    4

    Trích dẫn Nguyên bản được gửi bởi quangnh89 Xem bài viết
    C Code:
    1. int get_code ( void )
    2. {
    3.   int ch = getch();
    4.  
    5.   if ( ch == 0 || ch == 224 )
    6.     ch = 256 + getch();
    7.  
    8.   return ch;
    9. }
    vậy có nghĩa là nếu như em muốn sử dụng phím F1 thì sẽ so sánh biến $ch nếu =315 thì là phím F1, 316 là F2 Phải không ạ. Tiện thể cho em hỏi luôn cho nó dài bài là em muốn sử dụng phím ecs có mã là 27 thì có cách nào khác không ạ. Hay cũng vẫn phải sử dụng cách trên ạ

  5. #5
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    nếu nhấn esc thì hàm này trả về 27, khi đó nó tương đương getch()
    dùng bình thường

  6. #6
    Ngày gia nhập
    03 2011
    Bài viết
    4

    Mặc định Cách sử dụng phím chức năng trong lập trình C?

    em hiểu rồi ạ. Rất cảm ơn mọi người ạ

  7. #7
    Ngày gia nhập
    03 2011
    Bài viết
    4

    Trích dẫn Nguyên bản được gửi bởi quangnh89 Xem bài viết
    mình đoán bạn lập trình console
    thông thường với các phím chức năng như F1, F2 .. hoặc các phím đặc biệt khác, người ta sử dụng scancode để phát hiện phím này có được nhấn hay không

    với C, có 1 cách đơn giản là dùng getch, khi đó mã đầu tiên trả về là 0 ( trong 1 số hệ thống là 224), mã thứ 2 là code của phím được ấn. bạn có thể dùng code sau để thử. Nếu giá trị trả về > 256 tức là phím đặc biệt

    trong trường hợp getch trả về 0 thì mã nằm ở stdin, bạn dùng getch lần nữa đê lấy nội dung
    C Code:
    1. int get_code ( void )
    2. {
    3.   int ch = getch();
    4.  
    5.   if ( ch == 0 || ch == 224 )
    6.     ch = 256 + getch();
    7.  
    8.   return ch;
    9. }
    Em đã làm theo cách này của anh
    nhưng giờ em lại gặp phải một khó khăn nữa. Rất mong anh và các anh chị ở đây giúp đỡ thêm.
    Vì không biết người dùng sẽ nhấn các phím F vào lúc nào nên em đã getch từng ký tự một mà người dùng nhập vào. Nhưng gặp phải một lỗi là khi người dùng phím xóa trái thì màn hình vẫn hiển thị nội dung mà không bị xóa đi. Nhưng trong bộ nhớ thì lại mất. Mặc dù vẫn đạt được mục đích là xóa trái nhưng rất khó khăn cho người dùng vì không biết mình có xóa nhầm không. Thêm vào nữa là khi người dùng ấn phím F thì nội dung phím này lại được hiển thị vào cuối dòng chữ. Rất mong mọi người giúp em khắc phục các lỗi này.

    đây là đoạn code ạ
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. int get_function_key(int func){
    5.     func=getch()+256;
    6.     return func;
    7. }
    8.  
    9. main()
    10. {
    11.     int key,i=0;
    12.     char data[1000];
    13.     printf("Moi ban nhap du lieu:\n");
    14.     do{
    15.         key=getche();
    16.         if(key==0||key==224)
    17.     key=get_function_key(key);
    18.     switch(key)
    19.     {
    20.         case 13: printf("\n");data[i]='\n'; i++;break;
    21.         case 316: printf("\nDang luu du lieu");break;
    22.         case 318: printf("\nDang thoat chuong trinh");break;
    23.         default: data[i]=key;
    24.         i++;
    25.         break;
    26.     }
    27.     }while(key!=316&&key!=318);
    28.     printf("\nDa nhap xong du lieu\n");
    29.     puts(data);
    30.     getch();
    31.    
    32.    
    33. }

  8. #8
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    khi nhấn phím xóa, con trỏ tự động lùi 1 kí tự, bạn có thể dùng printf(" \b"); để ghi dấu space đè lên kí tự cũ

Các đề tài tương tự

  1. Bản chất của toán tử >> << và khả năng đa năng hóa >> << C++ (toán tử xuất nhập)
    Gửi bởi langman trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 05-03-2016, 11:46 PM
  2. năng lượng trong lĩnh vực Tiết kiệm năng lượng
    Gửi bởi zennery trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 27-12-2013, 07:02 PM
  3. Trả lời: 0
    Bài viết cuối: 09-10-2012, 11:06 AM
  4. lệnh traloi=toupper((getch)) có chức năng gì trong hàm xóa trong danh sách liên kết?
    Gửi bởi nhoccon.uit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 24-04-2011, 10:04 AM
  5. C# | Chức năng Update phần mềm. Làm sao để viết chức năng này?
    Gửi bởi duckman trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 17-06-2009, 08:56 PM

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