странные ошибки функции getline - PullRequest
0 голосов
/ 05 сентября 2011

Я пытался сделать что-нибудь для чтения / записи файлов, и я не могу запустить вторую команду getline.Любые идеи относительно того, почему это происходит?

char str[80];
char substr[10];
file.open("abc.txt", fstream::in);

    file.getline(str,'\n');
      while(!file.eof())
    {
        i=0;
        while(str[i]!='\n') {substr[i] = str[i++]; }

        substr[i++]='\n'; 
        cout<<substr;

        file.getline(str,'\n');

    }

abc.txt

AND 1 2 3
NAND 4 5 6
NOR 2 3 7
XOR 1 6 8
OR 8 7 9

Я использовал notepad ++ для создания текстового файла, так что я уверен, что в конце есть CR / LFкаждой строки

Ответы [ 3 ]

1 голос
/ 05 сентября 2011

2-й аргумент fstream::getline - это размер потока, а не разделитель.Для версии с разделителями вам нужна перегруженная версия.См. эту ссылку .

0 голосов
/ 05 сентября 2011

Это работает. Используйте getline () в условии while, получите строку, разделенную символом '\ n', и используйте strcpy.

char str[80] = { '\0' };   
char substr[80] = { '\0' };

ifstream file;
file.open("abc.txt", fstream::in); 


int i  = 0;
while(file.getline(str, 79, '\n'))   
{   
    strncpy(substr, str, 78);    
    substr[strlen(substr)]='\n';    
    cout<<substr;      
} 
0 голосов
/ 05 сентября 2011

После моего комментария попробуйте переместить команду file.getline в цикле while:

...
while(!file.eof())
{
    file.getline(str,80,'\n');
    ...
...