Я хочу написать код, чтобы пользователь вводил только 1 цифру. Если пользователь вводит что-то вроде «0 1 3», я хочу, чтобы моя программа прочитала сообщение об ошибке, которое я понятия не имею, как это сделать. У кого-нибудь есть идея, как подойти к этому? Мой текущий код просто принимает первый номер, если пользователь вводит кучу чисел с промежутком между ними.Проверка данных в C - обеспечение ввода в правильном формате
См. Мой код ниже. Спасибо: D
//Prompt the user to enter the low radius with data validation
printf("Enter the low radius [0.0..40.0]: ");
do
{
ret = scanf("%lf", &lowRadius);
//type validation
if (ret != 1)
{
int ch = 0;
while (((ch = getchar()) != EOF) && (ch != '\n'));
printf("Wrong input. Please enter one numerical value: ");
}
//range validation
else if((lowRadius < 0 || lowRadius > 40))
{
printf("Incorrect value. Please enter in range 0-40: ");
}
else break;
} while ((ret != 1) || (lowRadius < 0 || lowRadius > 40));//end while lowRadius
У вас уже есть код. Используйте 'getchar' для чтения с ввода до тех пор, пока не будет найдена новая строка. Если любые символы небелого пробела перед символом новой строки, вход недействителен. Кроме того, вам не нужен цикл 'do {} while', так как вы используете' break' в любом случае. Простой цикл while (1) {} 'или' for (;;) {} будет работать. Просто «перерыв» цикла, когда вход действителен. – user3386109
Это потому, что scanf небезопасен на многих уровнях. См. [Этот пост] (http://stackoverflow.com/questions/30577519/error-c4996-scanf-this-function-or-variable-may-be-unsafe-in-c-programming) о том, почему не рекомендуется используйте его, а также альтернативу. Также вы должны рассмотреть возможность использования внешней или третьей части библиотеки для безопасного анализа ваших входов. – Joel
Как пользователи могут вводить значение типа '39' с использованием одной цифры? Вы имеете в виду «один номер»? Как насчет фракций (39.23423)? Как вам уже сказали, вероятно, что 'scanf()' не является инструментом; используйте 'fgets()' для чтения строки, а затем, возможно, 'sscanf()' или, возможно, 'strtod()', чтобы преобразовать значение, тщательно обработать условия ошибки и проверить, нет ли мусора после числа и перед новой строкой. –