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

Đề tài: [ Solved ]Đa năng hóa dòng vào/ra, ai xem giúp với.

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Đà Nẵng city
    Bài viết
    40

    Mặc định [ Solved ]Đa năng hóa dòng vào/ra, ai xem giúp với.

    Bài này "Overloading Stream Insertion and Stream Extraction Operators", mình viết cho số phức, overloading được +,<<,>>, ko gặp lỗi, nhưng lại xuất ra sai, mình bọc PhP phần chạy dos ở dưới, ai kiểm tra giúp với.

    C++ Code:
    1. #include <iostream.h>
    2. #include <conio.h>
    3.  
    4. class sp
    5. {
    6.       private:
    7.               float real;
    8.               float ima;
    9.       public:
    10.              friend ostream &operator<< ( ostream &, const sp & );
    11.              friend istream &operator>> ( istream &, sp & );
    12.              sp operator+(const sp &sp2);          
    13. };
    14.  
    15. ostream &operator<< ( ostream &output, const sp &a )
    16. {
    17.        output<<"("<<a.real<<"*i + "<<a.ima<<")";
    18.        return output;
    19. }
    20.  
    21. istream &operator>> ( istream &input, sp &a )
    22. {
    23.         input.ignore();
    24.         input>>a.real;
    25.         input.ignore( 5 );
    26.         input>>a.ima;
    27.         input.ignore();
    28.         return input;
    29. }
    30.        
    31. sp sp::operator+ ( const sp &sp2 )
    32. {
    33.                  sp p;
    34.                  p.real = this->real + sp2.real;
    35.                  p.ima  = this->ima  + sp2.ima ;
    36.                  return p;
    37. }
    38.  
    39. main()
    40. {
    41.       sp sp1,sp2;
    42.            
    43.       cout << "Enter complex in the form (a*i + b) :" << endl;
    44.       cout << "Complex 1 : "; cin >> sp1;
    45.       cout << "Complex 2 : "; cin >> sp2;
    46.       cout << endl;
    47.      
    48.       cout << "The Complex entered was : " << endl;
    49.       cout << "Complex 1 : ";
    50.       cout << sp1 << endl;
    51.       cout << "Complex 2 : ";
    52.       cout << sp2 << endl;
    53.      
    54.       cout << "Sum of the entered complex is equal : ";
    55.       cout << ( sp1 + sp2 ) << endl;
    56.       getch();
    57. }

    Xuất ra màn hình dos như sau :
    PHP Code:
    Enter complex in the form (a*b) :
    Complex 1 : (3*8)
    Complex 2 : (5*3)

    The Complex entered was :
    Complex 1 : (3*8)
    Complex 2 : (5.34652e+036*3.30595e-039)
    Sum of the entered complex is equal : (5.34652e+036*8

  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Cách nhập xuất này có nhược điểm là phải theo đúng khuôn dạng (có 5 kí tự giữa phần thực và phần ảo nếu không sẽ tiêu luôn) hơn nữa không nhận biết được dấu - hay + đều tự coi là + hết .
    C++ Code:
    1. istream &operator>> ( istream &input, sp &a )
    2. {
    3.         input >> a.real;
    4.         input.ignore( 5 );
    5.         input >> a.ima;
    6.         return input;
    7. }
    Chỉ thế này thôi bạn là chạy tốt (yêu cầu nhập đúng khuôn mẫu a*i + b giữa a và b có đúng 5 kí tự nếu không chạy sai liền... ) .
    I'm superman

  3. #3
    Ngày gia nhập
    03 2008
    Nơi ở
    Đà Nẵng city
    Bài viết
    40

    Xời ơi, ý mình là chỉ khôn mẫu là a*i + b thì đúng, nhưng tại sao lại thành (a*i + b) thì lại sai, mặc dù đã có ignore() rồi?
    Đó đó , hok hỉu cái đó đó

    Mà đúng là nhập xuất kiểu này thì dễ sai, nhưng mà đây chỉ là ví dụ nhỏ lúc mình học cái này, đọc lý thuyết mãi thì viết thử, vấn đề ở đây là vì sao 2 khuôn mẫu đó 1 cái sai trong khi cái kia giống vậy thì lại đúng.

    Mình để dòng cout hướng dẫn trong hàm main là : "cout << "Enter complex in the form (a*i + b) :" << endl; mà , chứ đâu phải chỉ a*i + b, mà a*i + b thì cũng giống vậy, tại mới lập trình nên chưa hiểu sâu, sửa là phải giải thík đó nha )
    Đã được chỉnh sửa lần cuối bởi camping29 : 15-11-2008 lúc 08:59 PM. Lý do: Thêm thông tin bài viết

  4. #4
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Ồ xin lỗi tại đọc Code bạn nhanh quá nên không để ý hì sorry . Chỗ sai của bạn là ở dòng sau cùng input.ignore() chỉ đẩy thằng ')' ra khỏi bộ đệm còn thằng '\n' vẫn còn lại làm trôi dữ liệu đọc vào sau đó .
    C++ Code:
    1. istream &operator>> ( istream &input, sp &a )
    2. {
    3.         input.ignore();
    4.         input >> a.real;
    5.         input.ignore( 5 );
    6.         input >> a.ima;
    7.         input.ignore(2);/* Cho đẩy ra 2 thằng là được */
    8.         return input;
    9. }
    I'm superman

  5. #5
    Ngày gia nhập
    03 2008
    Nơi ở
    Đà Nẵng city
    Bài viết
    40

    Ok đã hiểu, thx rất nhiều.

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. C++ Tutorial Bản chất của toán tử ++ -- và khả năng đa năng hóa ++ --
    Gửi bởi langman trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 25-09-2012, 01:11 PM
  3. Lập trình C Cần giúp đỡ về 1 đoạn code đa năng hóa toán tử
    Gửi bởi Kira1077 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 04-04-2012, 09:25 PM
  4. da năng hóa toán tử giúp em
    Gửi bởi nhatnha trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 29-06-2010, 10:58 AM
  5. [ Solved ]Hiện ra dòng chữ chạy
    Gửi bởi toanhoi trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 11-09-2008, 07:37 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