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

Đề tài: Cách xóa màn hình (chỉ xóa một dòng hoặc một ký tự)

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

    Mặc định Cách xóa màn hình (chỉ xóa một dòng hoặc một ký tự)

    Mấy pro cho mình hỏi có hàm nào xóa màn hình tương tự như clrscr() hoặc system("cls") nhưng không xóa toàn bộ màn hình
    mà chỉ xóa 1 dòng hoặc 1 ký tự ngay sau dấu nhắc lệnh ko. Xin chỉ mình với!


    Cụ thể là mình đang tính viết 1 hàm InputInt(int n) cho nhập vào một số nguyên n.
    Với điều kiện chỉ được nhập các số 0-9 và phím backspace, còn nếu nhập các phím khác thì không có tác dụng gì

    Mình đặt int n=getch(), nếu char(n)=0-9 hoặc bằng 'backspace' thì thêm (hoặc bớt) nó vào 1 xâu s, và xuất ký tự đó ra màn hình
    nếu ko phải 0-9 thì bỏ qua.
    Và cứ làm lại như vậy cho đến khi nhấn Enter.

    Rồi đặt n=atoi(s) thì sẽ được số nguyên.

    Nhưng khi mình đã nhập được vài số, ví dụ nhập 123, sau đó nhấn backspace để xóa số 3 đi thì nó không xóa
    mà nó chỉ đưa dấu nháy về vị trí của số 3.






    Chính vì vậy mà mình muốn hỏi cách xóa ký tự '3' đi sau khi đã xuât (cout) ra màn hình.

    Cách này bên visual basic cũng đã thử nhưng không bị lỗi như vậy.

    Hoặc bạn nào code hay hơn thì share mình tham khảo với.
    Xin cảm ơn!

    Đây là code của mình

    C++ Code:
    1. #include <iostream>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4.  
    5. using namespace std;
    6.  
    7. void insert(char s[], char x)       // Chen x vao cuoi xau s
    8. {
    9.     int leng=strlen(s);
    10.     s[leng]=x;
    11.     s[leng+1]=NULL;
    12. }
    13.  
    14. void main()
    15. {
    16.     char s[12]="0";
    17.     int n;
    18.     cout <<"Nhap so n: ";
    19.  
    20.     do
    21.     {
    22.         n=getch();
    23.         if ( ((n<48)&&(n!=8)) || (n>57) ) continue;
    24.         else
    25.         {
    26.             cout <<char(n);
    27.             insert(s,char(n));
    28.         }
    29.     }
    30.     while (n!=13);
    31.  
    32.     n=atoi(s);
    33.  
    34.     cout <<"\n\nN+1 = " <<n+1;
    35.  
    36.     cout <<"\n\n";
    37. }

  2. #2
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Bạn back lại, ghi ra ký tự trắng (space) rồi back lại tiếp!
    C++ Code:
    1. if (n == '\b') std::cout << "\b \b";
    hoặc
    C Code:
    1. if (n == '\b') printf("\b \b");

    Muốn nó không bị thụt vào trong thì bạn kiểm tra thêm nếu chuỗi s đang nhập không trống mới xử lý back-space
    C++ Code:
    1. #include <iostream>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4.  
    5. using namespace std;
    6.  
    7. void main()
    8. {
    9.     char s[12]= {0};    // init tất cả = 0
    10.     int n, slen=0;
    11.     cout <<"Nhap so n: ";
    12.    
    13.     do
    14.     {
    15.         n=getch();
    16.        
    17.         if (n >= '0' && n <= '9' && slen < 11) {
    18.             s[slen++] = n;
    19.             cout << (char)n;
    20.         }
    21.         if (n == '\b' && slen > 0) {
    22.             s[--slen] = 0;
    23.             cout << "\b \b";
    24.         }
    25.     }
    26.     while (n!=13);
    27.    
    28.     n=atoi(s);
    29.    
    30.     cout <<"\n\nN+1 = " <<n+1;
    31.    
    32.     cout <<"\n\n";
    33. }
    Đã được chỉnh sửa lần cuối bởi fbchicken : 04-08-2011 lúc 04:28 PM.

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

    Cảm ơn bạn rất nhiều, mình đã hiểu rồi

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

  1. Kỹ thuật C++ Làm thế nào để xóa đi 1 dòng hiển thị
    Gửi bởi ninja_cn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 28-12-2012, 04:14 PM
  2. Sự cố Hỏi về việc Xóa bài mà ko có lý do hoặc thông báo
    Gửi bởi tieutinh189 trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 3
    Bài viết cuối: 28-02-2011, 07:35 PM
  3. Bài tập C++ xóa sinh viên trong dssv , ai test dùm em , xóa sv thứ 3 mà nó toàn xóa sv thứ 4
    Gửi bởi prt_awm trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 08-11-2010, 02:24 PM
  4. Xóa dòng thứ n của bảng
    Gửi bởi bathong trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 3
    Bài viết cuối: 17-10-2009, 10:13 PM
  5. xóa 1 dòng đã hiển thị
    Gửi bởi lovedtn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 17-10-2008, 09:45 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