Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 18 kết quả

Đề tài: ép dữ liệu nhập vào theo ý mình! Cho em hỏi?

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

    Question ép dữ liệu nhập vào theo ý mình! Cho em hỏi?

    Trước tiên xin cám ơn mọi người đã vào đọc bài của em.Em có 1 vấn đề khúc mắc.


    Code:
    #include <conio.h>
    #include <stdio.h>
    void main()
    {
    	int sum,num;
    	clrscr();
    	printf("Nhap vao 1 loat so nguyen : ");
    	sum=0;
    	for(;;)
    	{
    		scanf("%d",&num);
    		if(num==0)
    		break;
    		if(num>0)
    		sum=sum+num;
    
    	}
    	printf("Tong cac so nguyen duong cua day tren la : %d",sum);
    	getch();
    }
    Đoạn code này ở phần đầu yêu cầu nhập vào 1 loạt số nguyên,khi chạy chương trình nếu em nhập vào dữ liệu kiểu số thì ok.Nhưng ví dụ em nhập vào 1 kí tự giả sử như :'a' thì nó đứng chương trình luôn.Do đó ý em muốn là phải ép người nhập chỉ được nhập dữ liệu kiểu số,nhưng không biết cách đặt điều kiện như thế nào.Bác nào biết giúp em với nhé.Em mới học nên còn dở.Thanks mọi người.Chúc sức khỏe và thành công.

  2. #2
    Ngày gia nhập
    01 2010
    Nơi ở
    до свидания!
    Bài viết
    1,766

    Theo như tôi được biết thì không có cách nào "bình thường" có thể ép User nhập số hay nhập chữ không, nhưng điều này có thể làm được dễ dàng bằng cách Hook bàn phím (chặn và hủy thông điệp WM_KEYDOWN với wParam là mã ảo của các ký tự kiểu VK_xxx)... Tuy nhiên bạn phải tham khảo các chuyên đề về kỹ thuật này!

  3. #3
    Ngày gia nhập
    10 2009
    Nơi ở
    Close All
    Bài viết
    993

    Trích dẫn Nguyên bản được gửi bởi peterdrew Xem bài viết
    Theo như tôi được biết thì không có cách nào "bình thường" có thể ép User nhập số hay nhập chữ không, nhưng điều này có thể làm được dễ dàng bằng cách Hook bàn phím (chặn và hủy thông điệp WM_KEYDOWN với wParam là mã ảo của các ký tự kiểu VK_xxx)... Tuy nhiên bạn phải tham khảo các chuyên đề về kỹ thuật này!
    Bác petrdrew nói không đúng tí nào
    Cách bình thường hoàn toàn có thể làm đc điều này:chỉ cho phép người sử dụng chỉ đc nhập kiểu sô .
    Chứ chẳng cần Hook hiếc j cả.Hook hiếc là j? Đâu fai ai cũng biết
    Đã được chỉnh sửa lần cuối bởi tauit_dnmd : 27-03-2010 lúc 10:05 PM.

  4. #4
    Ngày gia nhập
    09 2008
    Bài viết
    3

    Vậy mong bác tauit_dnmd hướng dẫn em với!

  5. #5
    Ngày gia nhập
    10 2009
    Nơi ở
    Close All
    Bài viết
    993

    Trích dẫn Nguyên bản được gửi bởi anhsi89 Xem bài viết
    Vậy mong bác tauit_dnmd hướng dẫn em với!
    Đây bạn ,mới code xong chưa test thử vì đang ngồi máy ngoài tiệm net nên không có trình biên dịch để thử
    Cái này là chỉ cho phép nhập số int vô thôi.nhập kiểu khác không cho nhập.Bạn tét thử rồi thông báo kết quả cho tui nha.
    Hook làm j.

    PHP Code:
              char so[20],c//so[20] số độ dài tối đa là 19 chữ số.
               
    int DaGoXong=0;
               
    int number,i=-1;
               do
               {
                    do
                    {
                        
    c=getch();          //vòng do{...}while(); này chỉ nhận các kí tự số,và backspace,space  rồi gán cho c.
                        
    if((c>=48&&c<=57)||c==13||c==8) break;
                    }while(
    1);
                    if(
    c>=48&&c<=57&&i<18
                    {
                       
    so[++i]=c//nếu nhập đúng thì gán so[++i]=c;       //vd: lần lăp đâu tiên so[0]='1' chẳng hạn
                       
    gotoxy(i,1);textcolor(15);cprintf("%c",so[i]); //đoạn code này chỉ in ra màn hình thôi
                    
    }
                    if(
    c==8&i>=0//c=8: ấn nút backspace
                    
    {
                       
    gotoxy(i,1);textcolor(15);cprintf("%c",32);gotoxy(i,1);
                       
    so[i--]=NULL;  //gán so[i]=NULL,rồi giảm i=i-1;
                    
    }
                    if(
    c==13&&i>=0)  //ấn enter : nhập xong số nguyên
                    
    {
                       
    so[++i]=NULLgán ki tự cuối cùng dãy kí tự nhập vào là NULL
                       DaGoXong
    =1;
                    }
               }while(
    DaGoXong==0);
              
    number=atoi(so);  //convert char so[20] sang int //từ đó bạn có số int number 
    Hết
    Đã được chỉnh sửa lần cuối bởi tauit_dnmd : 27-03-2010 lúc 05:53 PM.

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

    Mặc định ép dữ liệu nhập vào theo ý mình! Cho em hỏi?

    Thanks bác nhiệt tình quá,nhưng em đọc hoài mà hiểu sơ sơ thôi,bác giải thích rõ ràng giúp em được không bác!

  7. #7
    Ngày gia nhập
    10 2009
    Nơi ở
    Close All
    Bài viết
    993

    Trích dẫn Nguyên bản được gửi bởi anhsi89 Xem bài viết
    Thanks bác nhiệt tình quá,nhưng em đọc hoài mà hiểu sơ sơ thôi,bác giải thích rõ ràng giúp em được không bác!
    Tui kèm giải thích ở trên rồi đó bạn

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

    Bác nhiệt tình quá,cảm ơn bác nhiều

  9. #9
    Ngày gia nhập
    10 2009
    Nơi ở
    Close All
    Bài viết
    993

    Trích dẫn Nguyên bản được gửi bởi anhsi89 Xem bài viết
    Bác nhiệt tình quá,cảm ơn bác nhiều
    Mà chạy đúng chưa vậy.bác chẳng thông báo kêt quả j cho mình hêt vậy

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

    hoặc như thế này :
    PHP Code:
    #include <iostream>
    using namespace std
    #include "conio.h"

    #define CONTROLNUMBER 224
    //nếu trên nền ntvdm hoặc DOS thì nó là 0


    template<class kieu>
    kieu nhap(kieu (*p)(const char*),int istr=0,char *str="code by langman")
    {
        
    char xau[100],ch='a';
        
    int n=0;
        while(
    ch!=0xD)
        {
            
    ch=getch();
            if (
    ch==CONTROLNUMBERgetch();
            else if (
    ch==0x8n--,printf("\b \b");//nút xóa
            
    else if (ch==0xD) continue;
            else 
    xau[n++]=ch,printf("%c",ch);
        }
        
    xau[n]=NULL,printf("\n");
        if (
    istr==1strcpy(str,xau);
        return 
    p(xau);
    }
    void nhap(int &a)
    {
        
    a=nhap(atoi);
    }
    void nhap(float &a)
    {
        
    a=float(nhap(atof));
    }
    void nhap(double &a)
    {
        
    a=nhap(atof);
    }
    void nhap(long &a)
    {
        
    a=nhap(atol);
    }
    void nhap(char *xau)
    {
        
    nhap(atoi,1,xau);
    }
    void main(void)  
    {

        
    char x[100];
        
    int a;
        
    cout<<"Nhap a:";
        
    nhap(a);
        
    cout<<"Nhap xau :";
        
    nhap(x);
        
    cout<<endl<<a<<endl<<x;


        
    system("pause"); 

    Đã được chỉnh sửa lần cuối bởi langman : 27-03-2010 lúc 09:38 PM. Lý do: upate to 2.1
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

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

  1. Kỹ thuật C nhập nhiều tam giác và nhập vào 5 chuổi xếp tăng theo aphab
    Gửi bởi nghiapro2589 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 28-05-2013, 12:00 PM
  2. Phiên dịch tiếng nhật uy tín chấp nhận đi theo đoàn
    Gửi bởi quocquang356 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: 30-11-2012, 12:40 PM
  3. Mạch điều khiển nháy theo nhạc equalizer | Mach dieu khien nhay theo nhac equalizer
    Gửi bởi marketeronline 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: 25-07-2012, 12:04 PM
  4. Bài tập C++ Cho một hoán vị nhỏ nhất theo thứ tự từ điển, hỏi có tồn tại hoán vị thứ k hay không?
    Gửi bởi Tadius trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 19
    Bài viết cuối: 01-05-2010, 03:20 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