Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 24 kết quả

Đề tài: Lỗi assignment of data-member read-only structure

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

    Wink Lỗi assignment of data-member read-only structure

    Code:
    class DataSet
    {
    private:
    double mx;
    double my;
    
    public:
    
    double slope() const;
    double intercept() const;
    
    };
    
    
    double DataSet::slope() const //<-- chữ const này là bắt buộc phải có.
    {
    double a;
    mx=1; //<-assignment of data-member`DataSet::my'in read-only structure
    my=2;
    a=mx+my;
    
    return a;
    
    
    
    double DataSet::intercept() const //<-- chữ const này là bắt buộc phải có.
    {
    double b;
    b=my-mx;
    return b;
    
    }
    //mục đích bài này là ra kết quả của đúng của a =3, và b=1;
    // mọi người cho em hỏi câu này :
    em bị lỗi assignment of data-member read-only structure bởi vì có chữ const của 2 hàm slope và intercept.bây h em phải làm ntn để fix lỗi này mà vẫn giữ nguyên chữ const. Dùng con trỏ thì phải.???

    Lưu ý, khi đưa code vào bài viết, hãy lồng nó vào tag code. Đọc Nội quy để biết thêm chi tiết!

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Em đã khai báo là const, nghĩa là nó không được modify dữ liệu, vậy complier nó la làng là đúng rùi,
    mx=1; //<-assignment of data-member`DataSet::my'in read-only structure
    my=2;
    Làm sao em gán kiểu này được ?
    Anh sữa lại + comment em đọc sẽ hiểu :
    PHP Code:
    #include <iostream>
    using namespace std;

    class 
    DataSet
    {
    private:
      
    double mx;
      
    double my;
    public:
      
    //Muốn khởi tạo cho dữ liệu thì phải có thằng constructor
      
    DataSet(double xdouble y):mx(x), my(y)
      {}
      
    //4 thằng này là accessor, nó có thể truy xuất dữ liệu 
      //cũng như modify dữ liệu
      
    double getMx() const { return mx; }
      
    double getMy() const { return my; }
      
    void setMx(double val) { mx val; }
      
    void setMy(double val) { my val; }
      
      
    double slope() const;
      
    double intercept() const;
    };

    double DataSet::slope() const //<-- chu+~ const này là ba('t buo^.c pha?i có.
    {
      return (
    getMx() + getMy());
      
    //mx = 1; //<-assignment of data-member`DataSet::my'in read-only structure
      //my = 2;
      //a=mx+my;
      //return a;
    }


    double DataSet::intercept() const //<-- chu+~ const này là ba('t buo^.c pha?i có.
    {
      return (
    getMy() - getMx());
      
    //double b;
    //b=my-mx;
    //return b;
    }

    int main()
    {
      
    //Khởi tạo thế này đây
      
    DataSet aSet(3,4);
      
    cout << aSet.slope() << '\n';
      
    cout << aSet.intercept();


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

    thanks a rất nhiều. cách này thì quá ổn . nhưng theo yêu cầu đề bài thì nó chỉ cho dùng 2 hàm slope và intercept thôi., ko được khởi tạo thêm.
    a có cách nào khác ko???
    đây là bài đầy đủ của e http://www.bigupload.com/files/YGYRA...ent_1.rar.html
    còn đây là đề bài:http://cs.senecac.on.ca/~btp200/page...nments/a1.html

  4. #4
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Làm cách đó thì bỏ thuộc tính private đi, cho nó public là xong, nhưng làm vậy thì còn gì là class nữa T_T. làn sau em post đề lên rõ ràng nhé, không cần đưa link như vậy. Mà em học trường gì mà đề toàn English thế nhỉ T_T :
    Regression Analysis (x on y)
    ============================

    Choose one of the following options:
    1 Load a data set from file
    2 Display statistics for all data sets
    0 Quit
    Your selection : 1

    Enter filename : paleo.dat

    Choose one of the following options:
    1 Load a data set from file
    2 Display statistics for all data sets
    0 Quit
    Your selection : 1

    Enter filename : stopDist.dat

    Choose one of the following options:
    1 Load a data set from file
    2 Display statistics for all data sets
    0 Quit
    Your selection : 2

    Data Set Label Slope Intercept Correlation
    ----------------------------------------------------
    paleo.dat 0.64 2.51 0.88
    stopDist.dat 0.26 26.94 0.91

    Choose one of the following options:
    1 Load a data set from file
    2 Display statistics for all data sets
    0 Quit
    Your selection : 0

    Have a nice day!
    Cái này nó kêu load dữ liệu vào từ file cơ mà ? Em muốn sử dụng phép gán như thế để làm gì nhỉ, không rõ mục đích thì anh không giúp được. Mà anh thấy bài em viết khá tốt đó chứ T_T. Not newbie at all ! anyway, where are you taking this course ?

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

    Code:
    nhưng cho nó là public thì ko thể nào gọi giá trị mx , my từ bên trong hàm intercept.
    class DataSet
    {
    
    double mx;
    double my;
    
    public:
    double mx;
    double my;
    double slope() const;
    double intercept() const;
    
    };
    
    
    double DataSet::slope() const //<-- chữ const này là bắt buộc phải có.
    {
    double a;
    mx=1; //<-assignment of data-member`DataSet::my'in read-only structure
    my=2;
    a=mx+my;
    
    return a;
    
    
    
    double DataSet::intercept() const //<-- chữ const này là bắt buộc phải có.
    {
    double b;
    b=my-mx;
    return b;
    
    }
    Lưu ý: Khi gửi code vào cùng với bài viết, vui lòng để nó vào trong tag code. Đọc Nội quy để biết thêm chi tiết!

  6. #6
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mặc định Lỗi assignment of data-member read-only structure

    Mà sao cái assignment này lại năm 2005 thế nhỉ, có phải em làm không đó ?
    class Point.h
    PHP Code:
    class DataPoint{
    private :
        
    double xy;
    public :
        
    int loadFromFile(FILEfp);
        
    double getx() const;
        
    double gety() const;
    };

    int DataPoint::loadFromFile(FILEfp){
        return 
    fscanf(fp"%lf%lf%", &x, &y);     
    }
    double DataPoint::getx() const{
       return 
    x;
    }
    double DataPoint::gety() const{
       return 
    y;

    class DataSet
    PHP Code:
    class DataSet{
    private:    
        
    int count;
        
    char name[15];
        
    DataPoint* list;
        
    double mxmysxsy;
        
    double r_n
    public:
        
    bool loadFromFile(const charfilename);
        
    void closeUp();
        const 
    charlabel() const;
        
    double slope() const;
        
    double intercept() const;
        
    double correlation() const;
        
    int nPoints() const;
        
    DataPoint point(int i) const;
    };

    bool DataSet::loadFromFile(const charfilename)
    {
        
    FILEfp fopen(filename"r");
        
    cout << filename;
        
    strcpy(namefilename);
        if (
    fp!= NULL
        {
            
    count 0;
            
    int i 0;
            
    char temp;
            while(
    fscanf(fp"%c" , &temp) == 1
            {
                 if(
    temp=='\n')count++;
            }
            
    cout << "count = " << count << endl;
            list = new 
    DataPoint [count];
            
    rewind(fp);
            for(
    int i 0counti++)
                list[
    i].loadFromFile(fp);
            for(
    int i 0counti++)
            {
                
    cout.precision(4);
                
    cout << fixed << list[i].getx() << "," << list[i].gety() << endl;
            }
            
    fclose(fp);
            return 
    true;
        }
        else
            return 
    false;
    }    

    void DataSet::closeUp()
    {
        
    delete [] list;
        list = 
    NULL;    
    }      
    const 
    charDataSet::label() const{
        return 
    name;      
    }

    double DataSet::slope() const
    {
        
    double sx 0sy 0;
        
    double t1 0t2 0t;
        
    double r_n 0;
        for(
    int i 0counti++)
        {
            
    mx += list[i].getx();
            
    my += list[i].gety();
            
    sx += pow((list[i].getx()),2);
            
    sy += pow((list[i].gety()),2);
        }
        
    mx mx/count;
        
    my my/count;
        for(
    int i=0counti++)
        {
            
    t1 += ((list[i].getx()- mx)*(list[i].gety() - my));
            
    t2 += pow((list[i].getx() - mx),2);
            
    r_n += list[i].getx()*list[i].gety();
        }
        
    t1/t2;
        return 
    t;
    }

    double DataSet::intercept() const
    {
        
    double b;
        
    my slope()*mx;
        return 
    b;
    }
          
    double DataSet::correlation() const
    {
        
    double r 0;
        
    double dxdy;
        
    dx sqrt( ( sx count) - pow(mx,2));
        
    dy sqrt( ( sy count) - pow(my,2));
        
    = ( (r_n count) - (mx*my)) / (dx*dy);
        return 
    r;
    }
          
    int DataSet::nPoints() const
    {
        return 
    count;
    }

    DataPoint DataSet::point(int i) const
    {
        return list[
    i];


    Main

    PHP Code:
    #define MAX_DATA_SETS 10
    #define MAX_FILENAME 21
    #define LOAD      1
    #define STATS     2
    #define QUIT      0
    #define NOPTIONS  3
    int menu(void);
    double getPosDouble();
    int findFile(const char*, const DataSetdataint);
    void displayDataSet(const DataSetdataint noDataSets);
    void displayStats(const DataSetdataint noDataSets);
    void loadDataSet(DataSetdataintnoDataSets);


    int main() 

        
    bool keepgoing
        
    int choicenoDataSets
        
    DataSet data[MAX_DATA_SETS]; 
        
    noDataSets 0
        
    keepgoing true
        
    cout << "Regression analysis (x on y)\n" << "============================\n"
        do{ 
            
    choice menu(); 
            switch (
    choice
            { 
                 case 
    LOADloadDataSet(data, &noDataSets); 
                    break; 
                 case 
    STATSdisplayStats(datanoDataSets); 
                    break;
                 case 
    QUITkeepgoing false
                    break; 
                 default: 
    cout << "Choice not implemented!" << endl
            } 
        } while (
    keepgoing); 
        for (
    int i 0noDataSetsi++)
            
    data[i].closeUp(); 
        
    cout << "Have a nice day!" << endl; return 0;
        
    system("PAUSE"); 

    // menu return user selection 
    int menu(void

        
    int choice
        
    bool keepgoing
        
    cout << endl
        
    cout << "Choose one of the following options:" << endl
        
    cout << ' ' << LOAD << " Load a data set from file" << endl
        
    cout << ' ' << STATS << " Display statistics for all data sets" << endl
        
    cout << ' ' << QUIT << " Quit" << endl
        do { 
    keepgoing truecout << "Your selection : "
        
    cin >> choice
        if (
    cin.fail()) 
        { 
           
    cin.clear(); 
           
    cin.ignore(2000,'\n')
           ; 
        } 
        else if 
        (
    cin.get() != '\n'
        { 
           
    cout << "**Trailing characters. Try again.**" << endl;
           
    cin.ignore(2000,'\n'); 
        } 
        else if (
    choice || choice >= NOPTIONS
        { 
           
    cout << "**Invalid choice. Try again.**" << endl
        } 
             else 
             { 
             
    keepgoing false
             } 
        } while (
    keepgoing); 
        
    cout << endl
        return 
    choice;

    // returns a positive double 

    double getPosDouble() 

        
    double value
        
    bool ok
        
    ok false
        do{ 
            
    cout << "Enter a positive value : "
            
    cin >> value
            if (
    cin.fail()) 
            { 
                
    cin.clear(); 
                
    cin.ignore(2000'\n'); 
                
    cout << "Invalid character. Try Again." << endl
            }
            else if (
    value <= 0.0
            { 
                
    cout << value << " is not positive. Try Again." << endl
                
    cin.ignore(2000'\n'); 
            } 
            else if (
    char(cin.get()) != '\n'
            { 
                
    cout << "Trailing characters. Try Again." << endl
                
    cin.ignore(2000'\n'); 
            } 
            else 
                
    ok true
        } 
        while(!
    ok); 
        return 
    value

    // gets a filename from the user and returns the index of the 
    // filename in the array of files 
    int findFile(const charmessage, const DataSetdataint noDataSets

        
    char filename[MAX_FILENAME]; 
        
    int j = -1
        
    cout << message
        
    cin >> filename
        
    = -1
        for (
    int i 0noDataSetsi++)
        if (!
    strcmp(filenamedata[i].label())) 
        
    i
        if (
    == -1
        
    cout << "Filename " << filename << " not found" << endl
        return 
    j

    // loadDataSet loads a Data Set from a user specified file 
    void loadDataSet(DataSetdataintnoDataSets

         
    char filename[MAX_FILENAME];
         if (*
    noDataSets MAX_DATA_SETS
         { 
            
    cout << "Enter filename : ";  
            
    cin >> filename
            if (
    data[*noDataSets].loadFromFile(filename)) 
                ++*
    noDataSets
            else 
                
    cout << "Filename " << filename << " not found" << endl
         } 
         else 
    cout << "Data Set Limit Reached" << endl

    // displayStats display regression stats for all Data Sets 

    void displayStats(const DataSetdataint noDataSets

         
    cout << setw(MAX_FILENAME-1) << left << "Data Set Label" << right
         
    cout << " Slope Intercept Correlation" << endl
         
    cout.setf(ios::fixed); 
         
    cout.precision(2); 
         for (
    int i 0noDataSetsi++) 
         { 
             
    cout << setw(MAX_FILENAME-1) << left << data[i].label() << right
             
    cout << setw(10) << data[i].slope() << setw(10) << data[i].intercept() <<  setw(10) << data[i].correlation() <<  endl
             
    system("PAUSE");
         } 
         
    cout.unsetf(ios::fixed); 
         
    cout.precision(6);

    Anh post lên lại cho rõ ràng đây, cái class Point của em, anh nghĩ chỉ cần cho nó là đói tượng, của class DataSet là ok mà ? Set cho data nó public cũng được.

  7. #7
    Ngày gia nhập
    01 2008
    Bài viết
    20

    "Mà anh thấy bài em viết khá tốt đó chứ T_T. Not newbie at all ! "
    "hôm qua thầy hỏi em 1 câu thấm thía " em có thi qua môn C không?"
    kiến thức cơ bản e quá yếu , h ko biết phải làm sao nữa??
    đây là giáo trình của trường Senecac ở Toronto , e mới học được 9 tháng thôi.

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

    phần main là nó cho sẵn a.

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Em học ở trường bên Toronto à ? Cái này khó thì không khó nhưng nếu học không kĩ làm cũng vất vả đó, trong code của em có đoạn thao tác lại stream cin (cái này tương đối phức tạp).
    Bây h thế này, em viết lại 2 lớp Point và Data set rõ ràng, dẹp phần xử lý file và thao tác lại stream cin qua 1 bên, mấy cái option không cần phải dùng macro, cứ dùng bình thường cho đơn giản là được rồi, cho dữ liệu vào file thì dùng đơn giản thôi, ifstream file.open(....) là được, khoang hãy thêm cái đoạn cho user nhập vào đã, chừng nào code chạy được rùi hãy thêm mấy cái xử lý phụ vào. Cứ viết đi rồi mai anh sẽ coi lại cho.

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Đây, anh mới demo lại cho em đây, cái yêu cầu đề bài của em yêu cầu dùng macro thì em cứ thêm vào, không sao hết, riêng anh thì anh không thích xài macro. Còn em thích xài using std namespace thì thêm vào, anh viết thì anh quen xài std:: rồi nên em dùng quick replace của Microsoft Visual C++ để edit lại cũng không sao hết :
    Anh viết lại class Point đơn giản như sau :
    Point.cpp
    PHP Code:
    class Point{
    private :
        
    double dxdy;

    public :
            
    //Constructor 1, để khởi tạo, ví dụ Point A;
        
    Point():dx(0.0), dy(0.0)
        {}
            
    //Constructor 2, để khởi tạo ví dụ Point B(3.3, 2.5);
        
    Point(double dxdouble dy):dx(dx), dy(dy)
        {}
        
    void setx(double x)
        {
            
    dx x;
        }
        
    void sety(double y){
            
    dy y;
        }
        
    double getx() const
        {
            return 
    dx;
        }
        
    double gety() const
        {
            return 
    dy;
        }
    }; 
    Và anh cảm thấy cái mx, my, r_n gì gì đó của em là không cần thiết, để vào chỉ tốn thêm dữ liệu, ta tính toạ độ, hay slope thì ta ghi thẳng vào file luôn, cuối cùng ta chỉ cần tạo 1 mãng *char[] để lưu đống file này, vậy là xong.
    Đây là lớp DataSet :
    DataSet.h
    PHP Code:
    class DataSet{
    private :
        
    Point pointList[100]; //Thằng này chứa dữ liệu của các điểm
                                        //xài pointer list kiểu của em cũng được
                                        //nhưng anh chỉ xài pointer khi nào bắt buộc 
                                       //để tránh error prone T_T.
        
    static int number_points;  //Lưu tổng số điểm trong dữ liệu
            
    static int count;    //Thằng này là số file, lưu ý 2 thằng này anh dùng            static
            
    char *data[10];     //Lưu số File dữ liệu
    public :
            
    //Constructor    
        
    DataSet();
            
    //Lấy số file
        
    static int get_count();
            
    //Lấy số điểm
            
    static int get_number_point();
            
    charsearch_file(char name[]) const;
        
    void add_file_to_data(char name[]);
        
    void create_file();
        
    void write_data_to_file(char name[]);
        
    void read_data_from_file(std::fstream &iss);
        
    void read_data_from_user();
        
    void displayStatistics() const;
        
    bool open_file(std::fstream &isschar *name);
        
    void take_data_from_user();
        
    void calculate_slope_and_write_to_file(const Point &fint _f
                                               const 
    Point &sint _s);
    }; 
    Tiếp theo là từng hàm, anh demo + comment công dụng của nó thôi, còn tính thêm correlation hay tagent line của các điểm hay gì gì đó thì em có thêm vào dễ dàng, anh thấy cái hàm tính slope của em nó hơi kì, không biết có phải lầm không, thêm nữa nếu pow(a, 2) thì quá phí, cứ lấy 2 cái nhân nhau là được rồi.
    Constructor

    PHP Code:
    //Bắt buộc phải khởi tạo cho static ở đây nhé, sugar syntax thôi, không có gì //hết.
    int DataSet::count 0;
    int DataSet::number_points 0;

    DataSet::DataSet()
    {
        for(
    int x 010; ++x)
        {
            
    data[x] = " ";
        }
        for(
    int x 0100; ++x)
        {
            
    pointList[x] = Point();
        }


    Hàm tìm file :

    PHP Code:
    charDataSet::search_file(char name[])const
    {
            
    //Nếu không có file nào thì trả về NULL
        
    if(count == 0)
        {
            
    std::cout << "Sorry ! Data is unavailabe.!";
            return 
    NULL;
        }
            
    //Có file đó thì trả về tên của file đó
        
    else{
            for(
    int index 0index count; ++index){
                if(
    strcmp(namedata[index]))
                    return 
    name;
            }
        }
        return 
    NULL;

    Hàm này để ghi nhận thêm file vào dữ liệu
    PHP Code:
    void DataSet::add_file_to_data(char name[])
    {
        
    data[count] = name;
        
    count++;

    Hàm này để tạo ra file mới
    PHP Code:
    void DataSet::create_file()
    {
        
    char file_name[15];
        
    std::cout << "Enter name of file you wanna create [not over 14 character]: ";
        
    file_name[15] = '\0';
        
    std::cin.getline(file_name14);
            
    //Khi tạo file ra thì add nó vào dữ liệu
        
    add_file_to_data(file_name);
        
    std::cout << "File created successfully.!";

    Hàm này để user tự chọn dữ liệu điểm có sẵn trong file, cái này nhập rồi tính luôn, muốn xuất ra file hay không thì tuỳ user, em implement thêm cũng được, trong đây anh có implement tính slope rồi khi vào file thử, demo thôi, nên hơi rối 1 tí, em tách ra thành từng hàm cho dễ hiểu
    PHP Code:
    void DataSet::take_data_from_user() 
    {
        
    int firstsecond;
        
    char answer;
        do{
            
    std::cout << "Please input 2 points :\n";
            
    std::cout << "First : \n";
            while(!
    srr::sscin(std::cinfirst)){
                
    std::cout << "Wrong format, try ag.\n";
            }
            
    std::cout << "End : \n";
            while(!
    srr::sscin(std::cinsecond)){
                
    std::cout << "Wrong format, try ag.\n";
            }
            
            
    calculate_slope_and_write_to_file(pointList[first], first
                                              
    pointList[second], second);

            
    std::cout << "Do you wish to continue,(y/n)\n";
            
    srr::sscin(std::cinanswer);
        }while(
    answer == 'y');

    Hàm này để lấy dữ liệu từ PointList, mình nhập vào 2 điểm, lưu vào dữ liệu :
    PHP Code:
    void DataSet::read_data_from_user()
    {    
        
    int total;
        
    double xcorycor;
        
    std::cout << "Enter the number of points :";
        while(!
    srr::sscin(std::cintotal))
        {
            
    std::cout << "Wrong format, try ag.\n";
        }

        for(
    int x 0totalx++)
        {
            
    std::cout << "Dx of point[" << "]";
            while(!
    srr::sscin(std::cinxcor)){
                
    std::cout << "Wrong format, try ag.\n";
            }
            
    pointList[x].setx(xcor);
            
            
    std::cout << "Dy of point[" << "]";
            while(!
    srr::sscin(std::cinycor)){
                
    std::cout << "Wrong format, try ag.\n";
            }
            
    pointList[x].sety(ycor);
        }
        
    number_points total;



    Hàm chức năng, xét coi file có trong dữ liệu hay không :

    PHP Code:
    bool DataSet::open_file(std::fstream &isschar *name)
    {
        
    iss.open(namestd::ios::in);
        if(
    iss.fail()){
            
    std::cerr << "File not found.";
            return 
    false;
        }
        else 
            return 
    true;

    Hàm này đọc dữ liệu từ file rồi lưu nó vào PointList của mình
    PHP Code:
    void DataSet::read_data_from_file(std::fstream &iss)
    {
        
    int indices 0;
        
    double xy;
        while(!
    iss.eof()){
                
    iss >> >> y;
                
    pointList[indices].setx(x);
                
    pointList[indices].sety(y);
                if(
    iss.get() == '\n'){
                    
    indices++;
                }
        }
        
    number_points indices;

    Hàm này xuất ra màn hình, anh thấy code em có format lại output, anh làm demo thử thôi, thêm vào demo sao cho đẹp thì tuỳ em :
    PHP Code:
    void DataSet::displayStatistics() const
    {
        
    std::cout << std::left;
        
    std::cout << std::setw(10) << "There are : " << number_points << " points : \n";
        for(
    int x 0number_points; ++x)
        {
            
    std::cout << "X coordinates : " << std::setw(10) << pointList[x].getx() << '\n';
            
    std::cout << "Y coordinates : " << std::setw(10) << pointList[x].gety() << '\n';
        }

    2 thằng này để xem coi có bao nhiêu điểm và file trong dữ liệu :
    PHP Code:
    int DataSet::get_count() 
    {
        return 
    count;
    }

    int DataSet::get_point()
    {
        return 
    number_points;

    Còn cái đống râu ria này thì để driver thử thôi, chú ý srrr:: là scope để xài sscin thôi, sugar syntax only T_T.
    PHP Code:
    void message()
    {
        
    std::cout << "1.Load data from file : \n";
        
    std::cout << "2.Input from user : \n";
        
    }
    void sub_message()
    {
        
    std::cout << "a/.Calculate slope of 2 specifice points and write to file :\n";
        
    std::cout << "b/.Show content of current file\n";
    }
    void menu_driven_system()
    {
        
    std::fstream client_file;
        
    char file_name[15];
        
    DataSet D;
        
    char out_answerin_answer;

        
    char sub;
        
    int choice;
        
    std::cout << "Enter option: \n\n";
        do{
            
    message();
            
    srr::sscin(std::cinchoice);
            switch(
    choice)
            {
                case 
    :
                
                    
    std::cout << "Enter name of file \n";
                    
    std::cin.getline(file_name15);
                    
    D.open_file(client_filefile_name);
                    
    D.read_data_from_file(client_file);
                    break;
                
                case 
    :
                
                    
    D.read_data_from_user();
                    break;
                
                default :
                    
    std::cout << "Unavailable option.!\n";
                    break;
            }
            do{
                
    sub_message();
                
    srr::sscin(std::cinsub);
                switch(
    sub){
                    case 
    'a' :
                        
    D.take_data_from_user();
                        break;
                    case 
    'b' :
                        
    D.displayStatistics();
                        break;
                    default :
                        
    std::cout << "Unavaible option.!\n";
                        break;
                    
                }
                
    std::cout << "Do you wish to continue (Y, N) \n";
                
    srr::sscin(std::cinin_answer);
            }while(
    in_answer == 'y');

            
    std::cout << "Do you wish to continue (Y, N) \n";
            
    srr::sscin(std::cinout_answer);
            
    system("cls");
        }while(
    out_answer == 'y');
    }
    int main()
    {
        
    menu_driven_system();
        return 
    0;

    Ở đây không xài marco vẫn có thể implement switch case dễ dàng, và chú ý là trong bài anh luôn dùng sscin()... Cái này là để tránh user nhập sai kiểu dữ liệu đồng thời ta có thể yên tâm sử dụng cin với cin.getline mà không bị nuốt bộ đếm.
    Đây là toàn bộ file đó, em include là xài được, rất đơn giản, em không hiểu chỗ nào thì anh sẽ giải thích cho, em có thể vào đay để coi chi tiết hơn :

    Code:
    http://forums.congdongcviet.com/showthread.php?t=5653
    SSCIN.h
    PHP Code:
    #ifndef SSCIN_H
    #define SSCIN_H

    #include <istream> 
    #include <ios> 
    #include <string> 
    #include <limits> 

    namespace srr 

        
    template<class T
        
    bool sscin(std::istream &iss&strchar _del
        { 
            if (
    iss >> std::noskipws >> str >> std::skipws && (iss.eof() || iss.get() == _del)) 
                return 
    true
            
    str T(); 
            
    iss.clear(); 
            
    iss.ignore(std::numeric_limits<std::streamsize>::max(), _del); 
            return 
    false
        } 

        
    template<class T
        
    bool sscin(std::istream &iss&str
        { 
            return 
    sscin(issstr'\n'); 
        } 

        
    template<> 
        
    bool sscin<std::string>(std::istream &issstd::string &strchar _del
        { 
            if (
    std::getline(issstr_del)) 
                return 
    true;
                
    str.erase(); 
                
    iss.clear();  
            return 
    false
        } 

        
    template<> 
        
    bool sscin<std::string>(std::istreamissstd::string &x
        { 
            return 
    sscin(issx'\n'); 
        } 
    }
    #endif 
    Code này vẫn còn thiếu nhiều, nhưng anh muốn cho em thấy cái hướng làm như thế sẽ đơn giản và hiệu quả hơn là em gộp chung. Ask when you got stuck !

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

  1. Hỏi về DB lookup table (read realated data) MVC 5
    Gửi bởi Shinichi trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 5
    Bài viết cuối: 05-12-2013, 09:48 PM
  2. Đếm số member của 1 structure trong C++ có được không?
    Gửi bởi tahi trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 8
    Bài viết cuối: 11-09-2012, 04:09 PM
  3. Tài liệu lập trình C++ Ebook C++ Data Structure and Algorithm
    Gửi bởi chuong01 trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 26
    Bài viết cuối: 30-05-2011, 05:57 PM
  4. Read và write binary data trong C#?
    Gửi bởi Malib trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 11-04-2010, 07:37 PM
  5. [English]Đọc-hiểu: Data Structure
    Gửi bởi neverland87 trong diễn đàn English for IT | Tiếng anh cho dân CNTT
    Trả lời: 4
    Bài viết cuối: 02-05-2007, 11:59 AM

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