Предполагая, что вы читаете файл PPM, как это:Чтение заголовка файла PPM (тип P6), ширина недостающую
ifstream img;
img.open("Image.ppm", ios::binary);
try
{
if (img.fail())
{
throw("Can't open input file");
}
string header;
int w, h, b;
img >> header;
cout << header << endl;
if (header.compare("P6") != 0)
{
throw("Wrong format file. File needs to be P6 type!");
}
img >> w >> h >> b;
cout << w << " " << h << " " << b << endl;
if (b < 0 || b > 255)
{
throw("An error message");
}
img.ignore(256, '\n');
}
catch (const char *err)
{
fprintf(stderr, "%s\n", err);
img.close();
}
И кто-то удалил значение ширины или высоты в заголовке. Теперь значение b будет считывать номер RGB в байтовой форме. Есть ли возможный случай, когда оператор if не будет препятствовать завершению программы? Другими словами, существует ли оптимизированный метод предотвращения таких ошибок?
Прочитайте как строку (используя 'getline'), поместите строку в' istringstream' и используйте строковый поток для анализа значений. немного. –
Вы также должны позаботиться о возможных комментариях (строка, начинающаяся с '#'), включенная в заголовок тоже. –
Да, я знаю. Позаботьтесь об этом. – Discordgr