У меня есть самая странная проблема! Мне нужно создать программу, в которой пользователь должен ввести 10-значное число. Поэтому я проверить ввод с помощью цикла Do-While:Цикл Do-while не заканчивается?
do
{
cout<<"Enter a 10-digit number: "<<endl;
cin>>number;
}
while (numberOfDigits(number) != 10);
Вот функция numberOfDigits:
int numberOfDigits(int num)
{
int d = 0;
while (num > 0)
{
num /= 10;
d++;
}
return d;
}
Так что, когда я ввожу число меньше 10, то петли и переходит к началу (говоря мне снова ввести 10-значное число). Однако, когда я ввожу число с более чем 10 цифрами, возникает бесконечный цикл, и консоль не прекращает печать «Введите 10-значное число:» ... Любые идеи?
Попробуйте изменить int на длинный – marsh
'int' обычно 32 бит в ширину; 32-разрядное (подписанное) целое число может содержать только до 2 ** 31 или чуть более 2 миллиардов, что уже равно 10 цифрам. Что-то большее, чем это не вписывается в int, а 'cin' вводит состояние ошибки, где он не может читать что-либо еще (то же самое произойдет, если вы наберете, например,« cat », а не число). * Безопасный * способ проверки ввода - читать все как строку, затем проверять его, а затем преобразовывать в окончательный тип ('int' и т. Д.), Если проверка прошла. – Cameron
Отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve). –