Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Lỗi khi nhập xuất dữ liệu sử dụng biến char từ file

    Chào các bác. Tình hình là mình mới vọc C++, nên có câu nào gà quá các bác bỏ quá cho ạ :P
    Mình tập viết một đoạn code đơn giản để đọc dữ liệu từ file này rồi ghi sang file khác, nhưng muốn sử dụng kiểu dữ liệu char để đọc từng ký tự một. Code này của mình khi xuất ra file out thì ký tự cuối của chuỗi luôn bị lặp 2 lần.
    Ví dụ file input của mình là : Cong dong C Viet
    Thì output sẽ là : Cong dong C Viett
    Mình có đọc trên mạng thì đoán là do ký tự cuối (ở ví dụ này là "t") còn lưu trong bộ nhớ của máy, nên khi đọc cái eof (hay cái ký tự vô hình cuối cùng nào đó mà máy k thèm lưu vào bộ nhớ) thì máy nó in ra 2 lần ký tự cuối ("tt").
    Mong các cao nhân vào chỉ giáo giúp ạ [IMG]images/smilies/smile.png[/IMG] Có cách nào để chữa lỗi này không ạ? Mọi người có thể chia sẻ chút kinh nghiệm khi nhập xuất file trong C++ không ạ?
    Mình thấy trên mạng mọi người hay nhập xuất bằng scanf với prinf. Có ai có tài liệu gì về thư viện này không ạ?
    Cảm ơn mọi người nhiều ạ!
    Mã:
    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    int main ()
    {
    	char c;
    	ifstream inp ("input.txt");
    	ofstream out ("output.txt");
    	while (! inp.eof())
    	{
    		inp.get(c);
    		out.put(c);
    	}
    	out.close ();
    	inp.close (); 
    	return 0;
    }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cảm ơn các bác ạ [IMG]images/smilies/biggrin.png[/IMG] <3

  3. #3
    - bạn có thể kiểm tra giá trị trả về của hàm get trong while (!inp.eof), nếu =NULL thì break.
    - hoặc bạn kiểm tra hàm get trong điều kiện của while.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    đọc kí tự cuối của file rồi đọc thêm một lần nữa mới có eof.
    sửa lại

    Mã:
        while (inp.get(c))    {        out.put(c);    }
    cách khác

    Mã:
    copy(istream_iterator<char>(inp), istream_iterator<char>(), ostream_iterator<char>(out));
    thêm nữa: khỏi cần gọi close làm gì, hàm hủy của fstream sẽ lo việc đó.

 

 

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
  •