Всем доброго времени суток! Мне нужно вводить имя книги и проверять в блоке try, если введена пустая строка или клавиша ENTER, то выводилось сообщение о неверном вводе. У меня получается так что блок catch почему то пропускается и не ловит ошибку. Заранее спасибо за ответы!
char* namebook = (char*)malloc(20);//буфер записи названи
puts("Введите название книги");
try //проверка исключения
{
scanf("%s", namebook);
int a = strlen(namebook);
if (a == 0)
throw(char*)"Вы ввели пустую строку";
}
catch (const char* exception)
{
puts(exception);
throw(char*)"Вы ввели пустую строку";
}
cin. – HolyBlackCat May 24 '22 at 21:19>>тоже не может в пустые строки. Правильно так:std::string str; std::getline(std::cin, str);. Дальшеstr.empty()проверяет на пустоту. Еще, сырые строки обычно не кидают как исключения (и что за странный каст?). Лучшеthrow std::runtime_error("текст");. – HolyBlackCat May 24 '22 at 21:49@username, а то мы не получаем уведомления. – HolyBlackCat May 24 '22 at 21:50char* namebook = (char*)malloc(20);и поэтому у меня сразу выводит сообщение об исключении, т.к строка изначально пуста и консоль не дает ввести ее – pumpkin May 24 '22 at 22:07if (namebook == "\0" or namebook == "\n")не сработает, так какnamebook- указатель, и вы сравниваете указатели, а не строки. Правильно:if (strcmp(namebook,"\0") == 0 || strcmp(namebook,"\n") == 0), или так:if (namebook[0] == '\0' || namebook[0] == '\n' && namebook[1] =='\0')– LShadow77 May 24 '22 at 22:12std::stringне угодил? – HolyBlackCat May 24 '22 at 22:20