Проверка файла на пустоту С++
Решаю задачу на определение симметричности массива, ну или является ли полиндромом,иначе говоря. Если симметрична, то вывожу 1, иначе 0. В файле сначала вводится кол-во элементов массива,а потом только последовательность чисел.
Проблема в том, что никак не получается корректно проверить файл на пустоту. Если файл полностью пустой - вывести 0.
Я использовал и if(!(fin >> number)) fout << 0; и if(fin.tellg() == 0) и другие.
Но ответ в таком случае выводит неккоректно. Даже если ввел симметричную последовательность чисел в файл, выводит 0.
Посоветуйте что-то еще.
#include <iostream>
#include <fstream>
using namespace std;
bool symmetry(int array[], int begin, int end){
{
return (begin >= end) || ((array[begin] == array[end]) && (symmetry(array, begin + 1, end - 1)));
}
return 0;
}
int main(){
ifstream fin("input.txt");
ofstream fout("output.txt");
int number, count = 0, size, a = 0;
if(!(fin >> number)) {fout << 0; return 0;} //проверка на пустоту
while(fin >> number){a++;}
fin.clear();
fin.seekg(0, ios::beg);
fin >> number;
size = number;
int array[size];
if (size == 0){fout << 0; return 0;}
if(size <= (a-1)){
for(int i = 0; i < size; i++) {fin >> number; array[count++] = number;}
}
else{
for(int i = 0; i < a-1; i++) {fin >> number; array[count++] = number;}
}
for(int i = 0; i < count; i++){cout << array[i];}
if(symmetry(array, 0, count-1) == true) fout<< 1;
else fout<< 0;
fin.close();
fout.close();
return 0;
}
Ответы (1 шт):
Проверка на пустоту через if(!(fin >> number)) - это корректная проверка на пустоту. Но ошибка возникает совсем по другой причине: в цикле for(int i = 0; i < a-1; i++) {fin >> number; array[count++] = number;} должен фигурировать не i < a-1, а i < a. Т.к надо cчитать до a-1 элемента включительно. Таким образом 1 непрочитанный элемент избавлял массив от симметричности и в файл, в качестве else, выдавался 0.