Здравья желаю
Пишу программу для перебора текстового файла и нахождения в нём нужного символа(слова) и тут...
наткнулся на аномалию:)) вот блок кода:
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
Я уже не знаю что и думать, причин такому поведению я не вижу. Прошу помочь указать на мои ошибки.
Спасибо.
Проблема в том, что если 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++;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем приветУ меня есть класс для авторизации пользователя, в котором находится переменная int id пользователя
Доброго времени суток! Есть некая таблица 4x4, необходимо выбрать строку и разбить столбцы, выбранной строки(выбранной строке присваивается...