Я боролся с той же проблемой, пытаясь сделать мое приложение будущим доказательством, но эти ребята заставили меня идти в правильном направлении. Я фактически не проверяю номер, чтобы увидеть, работает ли он или нет, я просто пытаюсь убедиться, что была введена серия чисел, которая может иметь или не иметь расширение.
Худший случай если пользователь должен был вытащить неформатированный номер из XML-файла, они все равно просто набрали числа на номерной панели телефона 012345678x5
, и никаких реальных причин сохранить его довольно. Этот тип RegEx для меня выдаст что-то вроде этого:
\d+ ?\w{0,9} ?\d+
01234467 extension 123456
01234567x123456
01234567890
Кажется, у вас есть какая-то ошибка в логике вашей программы. Я бы переписал
for ( d = 0; d <= deposits; ++d )
{
printf ("\nEnter the number of deposits (0-5):");
scanf ("%i", &d);
deposits = deposits + d;
if ( deposits > 5 || deposits < 0 )
{
printf ("*** Invalid number of deposits, please re-enter.");
deposits = deposits - d;
}/*end of if statement for deposits*/
}/*end of for loop for deposits*/
как
do {
printf ("\nEnter the number of deposits (0-5):");
scanf ("%i", &deposits);
if (deposits < 0 || deposits > 5) {
printf ("*** Invalid number of deposits, please re-enter.");
} else {
break;
}
} while (1);
То же самое можно сделать для других циклов.
Идея состоит в том, чтобы запросить ввод как минимум один раз и проверить, является ли введенное значение допустимым для вашего случая, если нет, запросите ввод еще раз.
Вы используете одну и ту же переменную d в цикле for и для ввода данных. Это вызывает проблему. Используйте следующий код: -
int dep;
for ( d = 0; d <= deposits; ++d )
{
printf ("\nEnter the number of deposits (0-5):");
scanf ("%i", &dep);
deposits = deposits + dep;
if ( deposits > 5 || deposits < 0 )
{
printf ("*** Invalid number of deposits, please re-enter.");
deposits = deposits - dep;
}/*end of if statement for deposits*/
else break;
}/*end o