2016-12-02 3 views
0

Привет, я пытаюсь подсчитать количество строк и количество символов в txt-файле, после 1 функции, которая подсчитывает строки (работает) char counter dosent work, но если Я использую только счетчик символов. (Я знаю, я могу смешать его с одной функции, но у меня есть большая проблема, что этот пример будет исправить)C++ fstream dosent work after 1 function (by refrence)

Главная:

int main() 
{ 
    ifstream isf("D:\\test.txt", ios_base::in); 
    ofstream osf("D:\\test.txt", fstream::app); 
    //WriteToFile(osf,isf); 
    cout << CountLines(isf)<< endl; 
    cout << CountChar(isf) <<endl; 
    isf.close(); 
    osf.close(); 
    return 0; 
} 

в функции:

const int CountLines(ifstream& isf) 
{ 
    int count = 1; 
    char c; 
    while (isf.get(c)) 
    { 
     if (c == '\n') 
      ++count; 
    } 
    return count; 
} 
const int CountChar(ifstream& isf) 
{ 
    int count = 0; 
    char c; 
    while (isf.get(c)) 
    { 
     ++count; 
    } 
    return count; 
} 

файл TXT:

abc 
abc 

выход:

2 
0 
Press any key to continue . . . 

и выход должен быть

2 
7 
Press any key to continue . . . 

ответ

1

Вы должны сбросить поток в исходное положение после вызова 1-й функции:

cout << CountLines(isf)<< endl; 
isf.clear(); // Reset stream states like eof() 
isf.seekg(0); // <<<<<<<<<<<<<<<<<< 
cout << CountChar(isf) <<endl; 
+0

она до сих пор работа – Rokni

+0

доцент @Rokni Как _ "это не работает "_ конкретно? Возможно, добавление 'isf.clear()' может помочь полностью восстановить состояние потока. –

+0

он не работает, но когда я меняю свой порядок, он делает. il отредактируйте ваше сообщение и отметьте его как ответ спасибо, вам просто нужно просмотреть редактирование :) – Rokni