2013-08-13 23 views
5

Tôi có một tệp mà tôi đang cố in trên màn hình, nhưng tất cả nó trả về là "0x28fe88", khi tệp đó là 13 cột bởi một vài trăm hàng.C++ Làm cách nào để in một tệp .txt đúng nguyên văn?

#include <iostream> 
#include <fstream> 
#include <istream> 
#include <ostream> 
#include <cstdlib> 
using namespace std; 

int main() 
{ 
    //Opens .txt file 
    ifstream infile1; 
    infile1.open("Taylor.txt"); 

    //Fail check 
    if(infile1.fail()) 
    { 
     cout << "File failed to open.\n"; 
     exit(1); 
    } 

    //Prints file to screen (not correctly) 
    cout << infile1; 

    //Closes file 
    infile1.close(); 
    return 0; 
} 

Tôi sẽ không đăng mã đầy đủ, nhưng tôi hy vọng nó đủ ngắn để không đảm bảo bắt được flak.

+0

Bạn không in nội dung của tệp bạn đang in đối tượng ifstream. –

+2

'cout << infile1;' * không * in nội dung tệp để xuất chuẩn. Nó đang in ra địa chỉ của đối tượng. – greatwolf

+0

Mã gốc chèn đối tượng luồng vào luồng. Điều đó làm việc bởi vì, trước C++ 11, các lớp luồng (về mặt kỹ thuật, lớp cơ sở 'basic_ios'), có một chuyển đổi thành' void * 'cho biết luồng có ở trạng thái tốt hay không (trả về một con trỏ null nếu nó không và một con trỏ không null khác); hiển thị mã ban đầu là kết quả của toán tử chuyển đổi này. Trong C++ 11 chuyển đổi đó không còn hiện diện; nó được thay thế bằng 'toán tử bool()' rõ ràng, phục vụ cùng một mục đích mà không đưa ra các chuyển đổi bí ẩn trong các ngữ cảnh không logic. –

Trả lời

8

Để chỉ in ra tệp văn bản, hãy sử dụng cout << infile1.rdbuf(); này, vì bây giờ bạn đang in một con trỏ tới một tệp.

EDIT: Nếu điều này không phù hợp với bạn, điều gần nhất với nó là đọc ký tự tệp theo ký tự. Có nhiều cách khác xung quanh nó bằng chuỗi, nhưng mã này sẽ làm tốt:

while(infile1.good()) 
    cout << (char)infile1.get(); 

Nó đọc mã ký tự trong khi các tập tin là tốt để đọc và ngay lập tức chuyển đổi nó để char (có thể cần một số sửa đổi cho UNICODE) và in ra.

+0

Điều này cũng nên in một con trỏ, thời gian này con trỏ đến đối tượng đệm của infile1. Hãy thử mã này: cout.rdbuf (infile1.rdbuf()); – Michael

+0

'cout << infile1.rdbuf()' hoạt động tốt, bởi vì ai biết :) – FrogTheFrog

+0

Bạn đúng, chỉ cần thử nghiệm nó, hoạt động tốt. – Michael

Các vấn đề liên quan