
C/C++
Пытаюсь сделать так, чтобы при вводе буквы выводилось сообщение "Введите число", но в итоге даже если вводишь числа все равно выводится это сообщение
Что не так с программой?

проверка не верная, читай строку или проверяй на 0
#include
using namespace std;
int input()
{
int inte; //проверяемая переменная
while(true) //цикл проверки ввода
{
cin >> inte; //ввод переменной через оператор >>
if (!cin.fail() && cin.rdbuf()->in_avail()==1) return inte;
//если ввод был успешный и остатка не осталось значит число правильное
//иначе выводим предупреждающее сообщение
cout in_avail(), '\n');
}
}
int main()
{
int a = input();
cout
не так примерно всё...
https://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt
"If extraction fails (e.g. if a letter was entered where a digit is expected), zero is written to value and failbit is set."
то есть вместо этой чепухи с isdigit тебе нужно проверять failbit у cin после ввода, альтернативный вариант - вводить string-и и уже потом пытаться конвертировать их в инты
для того, чтобы понять, что вообще делает то, что написано в текущий момент, советую почитать про побитовые операции (a|b - как раз побитовое "или") и доку по ctype (в частности по isdigit)
здесь после побитового "или" получается бессмысленное значение, с которым isdigit вряд ли сделает что-то толковое, т.к. ожидает на вход код ascii-символа
https://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt
"If extraction fails (e.g. if a letter was entered where a digit is expected), zero is written to value and failbit is set."
то есть вместо этой чепухи с isdigit тебе нужно проверять failbit у cin после ввода, альтернативный вариант - вводить string-и и уже потом пытаться конвертировать их в инты
для того, чтобы понять, что вообще делает то, что написано в текущий момент, советую почитать про побитовые операции (a|b - как раз побитовое "или") и доку по ctype (в частности по isdigit)
здесь после побитового "или" получается бессмысленное значение, с которым isdigit вряд ли сделает что-то толковое, т.к. ожидает на вход код ascii-символа
Что за херню ты выс@ал со строкой is digit , как ты вообще передаешь параметры в функцию тут ошибка, хочешь секрет расскажу в int у тебя по-любому число запишется буквы быть не может кроме определенных записей , используй блок try catch почитай на метаните о них
Похожие вопросы
- Написать программу на языке Си
- Некорректно работает написанная программа
- Написать программу на с++
- Помогите написать программу на С++
- Написать программы на СИ
- Помогите разобраться с программой
- Написать программу в С++ (нахождение площади трапеции)
- Помогите дополнить программу по условию
- Программа не выполняет условия задания, исходный массив меняет сам себя, помогите найти ошибку
- Программа на с++.