2017-02-02 2 views
-4

im studinging основы C++. Я хочу показать TXT-файл формы ANSI через C++, но он отображает только 25 строк; Что делать, чтобы отображать большие текстовые файлы, такие как 100 строк?чтение и отображение больших текстовых файлов через C++

код я использую сейчас:

char c[15]; 
ifstream f("file.txt",ios::in); 
f.seekg(0); 
while(!f.eof()) 
{f>>c; 
cout<<c; 
} 
getch(); 
f.close(); 

ответ

4

Попробуйте это:

std::string text; 
while (std::getline(f, text)) 
{ 
    std::cout << text << std::endl; 
} 

Не использовать массивы символов, так как они могут переполняться.

В вашем коде вы ограничены 15 символами на чтение из-за размера массива.

f >> c может перехватить ваш массив, так как вы не сказали системе, сколько символов нужно читать.

Смотрите также Why eof in a loop is bad

+0

Я был с вами вплоть до [ 'endl'] (http://chris-sharpe.blogspot.co.uk/2016/02/why-you- не должны потребительной stdendl.html)! (Кроме того, 'using namespace std;'?) – BoBTFish

+0

@BoBTFish: я добавил префикс 'std ::'. 'Endl' - очищать буфер каждую строку; новичок предмет. –

+2

Да, именно поэтому я * не * люблю учить его новичкам. Слишком много новичков считают, что это единственный «правильный» способ выпустить новую линию. Когда я вижу это в коде, я могу только предположить, что он использовался неправильно. Как здесь. Вы действительно хотите очистить каждую линию? И если да, будьте откровенны в этом ('std :: flush'). – BoBTFish

1

Read Why is iostream::eof inside a loop condition considered wrong?

Если вы должны использовать массив символов в качестве буфера, то вы должны использовать std::istream::read с его размером. Это потребует больше работы, чтобы получить это право.

Вы, вероятно, следует предпочесть:

#include <iostream> 
#include <fstream> 
#include <string> 

int main(){ 
    std::ifstream file("file.txt"); 
    for(std::string line; std::getline(file, line);) 
     std::cout << line << '\n'; 
} 
Смежные вопросы