У меня имеется файл, в котором я записал квадратную матрицу через пробелы в виде
1 2 3
4 5 6
7 8 9
Я хочу посчитать количество элементов, потом взять корень и получить длину строки и столбца. В конечном счёте переменная count
содержит 10, а не 9 как я предполагал.
ifstream file;
file.open("C:\\Users\\User\\Desktop\\A.txt");
if (!file.is_open())
{
cout << "Файл не удалось открыть. Название некорректно.";
}
double temp;
int count = 0;
while (!file.eof())
{
file >> temp;
count++;
}
После я перехожу к заполнению массива элементами. Но после заполнения массив содержит мусор. Это продолжение кода
file.seekg(0, ios::beg);
file.clear();
int side = sqrt(count - 1);
int** A = new int*[side];
for (int i = 0; i < side; i++)
{
A[i] = new int[side];
}
for (int i = 0; i < side; i++)
{
for (int j = 0; j < side; j++)
{
file >> A[i][j];
}
}
При использовании стандартных библиотек С и С++, цикл с предусловием "eof" - практически всегда ошибка. Состояние "eof" в С и С++ - это флаг успешности предыдущей операции чтения. Это состояние не устанавливается само по себе просто при достижении конца файла. Это состояние устанавливается тогда, когда вы выполните [неудачную] попытку чтения за пределами файла. Вот эта последняя неудачная попытка чтения и попадает в ваш счетчик.
То есть в С и С++ для того, чтобы получить состояние "eof" недостаточно просто дойти до конца файла, надо еще "удариться лбом" в этот конец файла.
Явная проверка "eof" обычно нужна только для постфактум-разборки причин ошибочных ситуаций, а для управления логикой процесса чтения явная проверка "eof" не нужна практически никогда
while (file >> temp)
count++;
В остальном коде: поставьте вызов clear
перед вызовом seekg
.
Также режет глаз неоправданное использование плавающих типов данных для решения чисто целочисленных задач. Непонятно, почему для изначального подсчета вы используете чтение double temp;
, когда далее фактически будет читаться целочисленная матрица.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Подскажите пожалуйста, можно ли как-нибудь реализовать удаление элемента по индексу с контейнера valarray?
Прохожу курс и застрял на задаче, которую в упор не могу понятьНиже само задание, которое не нужно решать