Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Чтение файла


Автор: ColdSpirit 15.3.2012, 13:17
Код

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{    
    char buff[5];
    vector<string> s;
    ifstream infile;
    infile.open("1.txt");
    while(1){
        infile.getline(buff,sizeof(buff));
        if (infile.eof()) break;
        s.push_back(buff);
    }
    
    //sort(s.begin(),s.end());
    for (int i=0 ; i<s.size() ; i++)
        cout << s[i] << endl;
    infile.close();

    _gettch();
    return 0;
}

Скатал код с учебника, ошибки убрал, компилируется, но программа почему-то застревает на цикле while(1){...}, и забивает в s пустые строки.
В отладчике пишет: infile    {_Filebuffer={...} } - хз как должно быть, но походу он вообще не открывается, раз  {...}.
Файлу давал и полный путь ("D:\1.txt"), и клал файл рядом с программой - ничего)
В файле написана абракадабра типа "adasfdfafa"

Автор: ambler 15.3.2012, 18:15
Код

int main()
{
    char buff[1024];
    vector<string> s;
    ifstream infile;

    memset(buff, 0, sizeof(buff));
    infile.open("d:\\1.txt");
    if (infile.is_open())
    {
        while(!infile.eof())
        {
            infile.getline(buff, sizeof(buff));
            if (infile.fail())
            {
                cout << "error read line" << endl;
                break;
            }
            s.push_back(buff);
        }
    }
    else
    {
        cout << "can't open file " << endl;
    }
    infile.close();

    //sort(s.begin(),s.end());
    for (int i=0 ; i<s.size() ; i++)
        cout << s[i] << endl;


    return 0;
}


http://www.cplusplus.com/reference/iostream/istream/getline/
Цитата

n
    Maximum number of characters to store (including the terminating null character).
    This is an integer value of type streamsize.
    If the function stops reading because this size is reached, the failbit internal flag is set.



Цитата

 В файле написана абракадабра типа "adasfdfafa" 

Размер буфера очень маленький, поэтому строка туда не помещается, из-за этого цикл выполняется бесконечно долго)

Автор: ColdSpirit 15.3.2012, 18:32
Ну буфер был [80], я уменьшил до пяти, непомню зачем))
А ошибку определил, оказывается путь, скопированный из эксплорера "D:\1.txt", программа не понимала, ей нужно было "D:\\1.txt"

ambler, спасибо за помощь  smile

Добавлено через 4 минуты и 2 секунды
Вопрос решен =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)