Q:

Странное поведение массива при работе find()

Здравья желаю
Пишу программу для перебора текстового файла и нахождения в нём нужного символа(слова)  и тут...
наткнулся на аномалию:))
вот блок кода:
std::fstream input(dir, std::ios::in|std::ios::out|std::ios::app);
   if(!input){std::cout<<"FILE_ERROR"<<std::endl; return;}
   std::string buffer;
   int arr_find[20], i=0;

   do{
      std::getline(input, buffer);//чтение строки
      arr_find[i] = buffer.find(account);//возвращает 0 если найден нужный символ
      if(arr_find[i] == 0){
         break;
      }else{i++;}
      std::cout<<arr_find[i]<<":"<<i<<std::endl;//вывод массива
   }while(!input.eof());

создаётся массив типа int (arr_find[20]) для заполнения работы функции find()
 из библиотеки string.h(cstring.h). 
Массив должен заполнятся значениями -1 или 0(0 если найден нужный символ(строка)). 
Прогоняю программу через файл.txt, ищу "asd":
a
s
z
xc
af
f
sss
asd

И на выходе получаю вывод массива:
3:1
1989621908:2
6356060:3
1989316383:4
6356088:5
1877822365:6
6356680:7

работаю в vim, командная строка Windows, MinGW32
Я уже не знаю что и думать, причин такому поведению я не вижу. Прошу помочь указать на мои ошибки. 
Спасибо.

A:

Проблема в том, что если arr_find[i] не равен 0. То есть строка не нашлась на нулевом месте, то вы прибавляете к i единицу:
if(arr_find[i] == 0){
         break;
      }else{i++;}

После чего вы выводите значение ячейки arr_find[i], но это не та ячейка, в которую вы записали результат, а следующая. А в этой ячейки может находиться всё, что угодно. Так как она была заполнена случайным числом при создании и больше не изменялась.

Можно переписать следующий код так: 
if(arr_find[i] == 0) {
         break;
} 
else {
    std::cout << arr_find[i] << ':' << i << std::endl;  // вывод массива
    i++;
}

