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

Đề tài: Thủ tục kiểm tra dữ liệu nhập vào

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

    Mặc định Thủ tục kiểm tra dữ liệu nhập vào

    Em muốn viết một thủ tục kiểm tra dữ liệu nhập vào. Dữ liệu nhập vào chỉ đc phép là số nguyên dương (ko đc phép là ký tự) vì số nhập vào này dùng để căn cứ để cấp phát động bộ nhớ cho một mảng cấu trúc. Vậy có thủ tục nào tối ưu nhất cho việc kiểm tra này ko ạ.
    Em chỉ nghĩ ra một cách là tạo một mảng 1000 số từ 1 đến 1000 rồi dùng vòng do...while và for để lặp chỉ cho số nhập vào thuộc mảng. Như thế có vẻ ko đc tối ưu lắm.
    Đã được chỉnh sửa lần cuối bởi Huyx : 19-11-2007 lúc 09:43 AM.
    welcome to http://fotech.org
    bắt đầu với C/C++

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Không hiểu đề lắm. Cậu tóm gọn lại tí đi.
    Có phải cậu định hỏi làm thế nào để nhập vào 1 số nguyên dương ko ?

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

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    Không hiểu đề lắm. Cậu tóm gọn lại tí đi.
    Có phải cậu định hỏi làm thế nào để nhập vào 1 số nguyên dương ko ?
    ko,ý em là chỉ cho nhập vào số nguyên dương, ko cho nhập vào ký tự, nếu gặp ký tự thì nhập lại
    welcome to http://fotech.org
    bắt đầu với C/C++

  4. #4
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Code:
    int a;
    while(a<1||a>maxint||a-int(a)!=0)  cin>>a;
    Ý bạn là như vậy à?
    Đề khó hiểu wa.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

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

    Trích dẫn Nguyên bản được gửi bởi NT_OnlyLove Xem bài viết
    Code:
    int a;
    while(a<1||a>maxint||a-int(a)!=0)  cin>>a;
    Ý bạn là như vậy à?
    Đề khó hiểu wa.
    Vẫn ko đc bác ạ. Em post cả đoạn code của em lên đây bác xem dùm em với

    Code:
    #include <iostream.h>
    #include <conio.h>
    using namespace std;
    struct date
    {
        int ngay,thang,nam;
    };
    struct sinhvien
    {
        char hoten[100];
        date ns;
    };    
    main()
    {
        sinhvien *x,temp;
        int n,i,j,ngaymax,ok;
        cout<<"\nLam viec voi danh sach sinh vien\n------\n\n";
        do
        {
            cout<<"So sinh vien can nhap: "; fflush(stdin); cin>>n;
        }while(n<1||n>1000||n-int(n)!=0);
        x=new sinhvien[n];
        for(i=0;i<n;i++)
        {
            cout<<"\nSinh vien "<<i+1;
            cout<<"\n--\n";
            cout<<"Ho va ten: "; fflush(stdin); cin.getline(x[i].hoten,100);
            do
            {
            if(ok==0)
            cout<<"\nXin loi, ngay thang ban vua nhap ko hop le,xin nhap lai\n\n";
            ok=1;
            cout<<"Ngay thang nam sinh (dang dd mm yyyy): ";
            fflush(stdin); cin>>x[i].ns.ngay>>x[i].ns.thang>>x[i].ns.nam;
            if(x[i].ns.nam<0||x[i].ns.thang<1||x[i].ns.ngay<1) ok=0;
            else if (x[i].ns.thang>12) ok=0;
            else 
            {
                switch(x[i].ns.thang)
                {
                    case 1:case 3:case 5:case 7:case 8:case 10:case 12: ngaymax=31;
                    case 4:case 6:case 9:case 11: ngaymax=30;
                    case 2: if(x[i].ns.nam%4==0) ngaymax=29; else ngaymax=28;
                }
                if (x[i].ns.ngay>ngaymax) ok=0;
            }
            } while(ok==0);
            cout<<"-----\n\n";
        }
        for(i=0;i<n-1;i++) //Sap xep sinh vien theo tuoi
            for(j=i+1;j<n;j++)
                if(x[j].ns.nam<x[i].ns.nam) 
                {
                    temp=x[i];
                    x[i]=x[j];
                    x[j]=temp;
                }
                else if(x[j].ns.nam==x[i].ns.nam) //neu cung nam sinh thi sep theo thang
                    if(x[j].ns.thang<x[i].ns.thang)
                    {
                        temp=x[i];
                        x[i]=x[j];
                        x[j]=temp;
                    }
                    else if(x[j].ns.thang==x[i].ns.thang) //cung thang thi sap theo ngay
                        if(x[j].ns.ngay<x[i].ns.ngay)
                        {
                            temp=x[i];
                            x[i]=x[j];
                            x[j]=temp;
                        }
        cout<<"Danh sach sinh vien sap xep theo tuoi (tu nho den lon):\n----\n";
        for(i=n-1;i>=0;i--)
            cout<<"\n"<<x[i].hoten;
        getch();
    }
    Với chương trình như trên, lúc chạy đến đoạn nhấp số sinh viên cần nhập, nếu mình nhập vào ký tự thì tự dưng toàn bộ chương trình nhảy loạn cả lên
    welcome to http://fotech.org
    bắt đầu với C/C++

  6. #6
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Mặc định Thủ tục kiểm tra dữ liệu nhập vào

    À mình hiểu ý bạn rồi.
    Bạn có thể làm thế này nhé:
    Code:
      1.Bạn cho nhập vào là ký tự (cứ cho nó nhập) rồi lưu vô một chuỗi
      2.Kiểm tra xem đó có phải là ký tự là số không?
      Cái này dùng là  if(47<Keyofchar <58) lưu vô chuỗi(vì đây là các ký tự số) và tăng biến đếm ký tự nhập đúng lên
      3.Cho nhập đến khi bấm enter thì dừng (ký tự '\n' hoặc mã acii là 23)
    4.Khi đủ thì convert string to int
    Đó là ý kiến của mình. Cho dù cách này bạn có nhập vô ký tự thì nó chả ảnh hưởng đến chương trình của mình.
    (Bạn có thể tham khảo bài mình làm ở topic "một bài toán khó" nhưng bạn phải down về rồi xem nhé)
    Thôi để mình viết luôn bạn tham khảo nhé:
    Code:
      char *str;//luu tru de convert
      char keyofchar;
      int count=0;
        while(keyofchar!='\n'){//khi bam enter thi stop
            keyofchar=getch();
             if(47<keyofchar&&keyofchar<58)  str[count++]=keyofchar;
       }
       int maxofstudent=atoi(str,10);//chú ý cái này mình không nhớ rõ lắm nói chung bạn tìm cấu trúc hàm atoi là ok
    Đã được chỉnh sửa lần cuối bởi NT_OnlyLove : 19-11-2007 lúc 05:50 PM.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  7. #7
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Trong code cũ của tui hình như có hàm ReadInt đấy, cậu tìm lại thử xem.

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

  1. Sửa máy tính, cài đặt windows, phần mềm tại nhà nhanh nhất, rẻ nhất, hiệu quả nhất …
    Gửi bởi hopluccc 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: 08-07-2013, 02:07 PM
  2. Trả lời: 12
    Bài viết cuối: 25-10-2012, 02:48 AM
  3. Bài tập C++ NHập mảng một chiều gồm n phần tử kết thúc nhập khi nhập một chữ cái
    Gửi bởi thienthanoze trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 15
    Bài viết cuối: 09-07-2012, 10:10 PM
  4. Bài tập C++ Viết phương trình nhập vào 1 chuỗi số.Hãy nhập vào 1 số.Đếm xem có bao nhiêu chữ số bạn vừa nhập
    Gửi bởi namtuocdn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 16-10-2011, 10:39 AM
  5. Bài tập C++ Nhập mảng 1 chiều, nếu phần tử nhập trùng nhau thì bắt nhập lại
    Gửi bởi danielh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 09-07-2011, 03:35 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