Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 2 của 2 Đầu tiênĐầu tiên 12
Kết quả 11 đến 12 của 12
  1. #11
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    1. đặt fin.ignore(100, '
    ') sau mỗi lần xài fin >> ...

    lý do là vì operator>> của istream thì sau khi trích dữ liệu thành công, nếu còn dư '
    ' thì ko bỏ dấu '
    ' này, nên nếu muốn xài istream::getline sau operator>> thì phải thêm istream::ignore(100, '
    '). Nếu trích ko thành công (ví dụ đọc vào số 1,2,3... nhưng dòng input trong file là a,b,c,...) thì istream flag sẽ chuyển thành fail, lúc này thì có 2 lựa chọn là báo lỗi -> ngừng chương trình, hoặc chạy tiếp và cho giá trị đó mặc định là 0... Vậy tổng quát thì phải viết là:

    Mã:
    fin >> x;if (fin.fail()) {    return false; //cách 1, chuyển kiểu trả về của hàm đọc file thành bool/int. Trong main sẽ bắt lỗi này.    x = 0; //cách 2. main sẽ ko bắt được lỗi, ko khuyến khích xài cách này.}fin.ignore(100, '
    '); fin.getline(...);
    nếu bảo đảm là fin >> ... sẽ trích đúng kiểu dữ liệu thì khỏi cần check fin.fail sau mỗi lần extract >> ở đây.

    Mã:
    fin >> x;fin.ignore(100, '
    '); fin.getline(...);



    2. bỏ hết mấy cái fin.clear() đi... fin.clear() ko phải là bỏ qua các ký tự còn dư mà chỉ clear flag state của fin về good thôi (3 flag khác là bad (corrupt file), fail (sai kiểu dữ liệu, đọc ko hết, v.v...), eof (end-of-file)). Thay vì chỉ viết 1 dòng fin.clear() thì phải viết là

    Mã:
    fin.getline(...);if (fin.fail()) {    fin.clear();    fin.ignore(100, '
    ');}
    vì khi istream::getline đọc dữ liệu thành công nó sẽ bỏ dấu '
    ', khỏi cần istream::ignore(100, '
    '). Tuy nhiên nếu đọc dữ liệu ko thành công (istream::fail()==true) do dòng input quá dài thì '
    ' sẽ ko được bỏ, phải bỏ qua (ignore) '
    ' và tất cả các ký tự còn dư trên dòng.

  2. #12
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cảm ơn bác nhiều ạ, nhờ bác mình đã hoàn thành xong bài rồi [IMG]images/smilies/smile.png[/IMG]

 

 
Trang 2 của 2 Đầu tiênĐầu tiên 12

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •