Я пытаюсь получить пользовательский ввод в функцию, используя scanf
или fgets
.Получение определенного пользовательского ввода и подсчета аргументов в функции с помощью scanf или fgets?
Я пишу C.
пользователь должен ввести 2 (положительные) целые числа. Разница между этими двумя должна быть равна 1. Я должен проверить, действительно ли было дано только 2 параметра.
Функция должна возвращать меньшую одну из заданных целых чисел, если:
дано количество аргументов == 2
разница фактически 1
функция должна возвращать -1, если:
-
! Рассчитывать
- аргумент = 2
- разница> 1
Функция должна вернуть -2, если:
- оба приведенные аргументы имеют такое же значение
у меня нет проблема сравнения целых чисел и возврата правильного значения, моя проблема связана с входом. До сих пор I've попытался это подходы:
1.)
int getInput(){
int user_input_nod_1;
int user_input_nod_2;
scanf("%d %d",&user_input_nod_1,&user_input_nod_2)
(...)
}
Проблема здесь в том, что у меня нет никакого способа знать, если пользователь ввел более 2-х целых чисел.
2.)
int getInput(){
int user_input_nod_1;
int user_input_nod_2;
char user_input_over;
scanf("%d %d",&user_input_nod_1,&user_input_nod_2)
scanf("%c",&user_input_over)
if(user_input_over != '\0'){
return -1;
}
(...)
}
Здесь возвращается программ -1, если больше двух параметров приведены, и отлично работает, когда заданы два параметра, но если дано только один scanf
ждет, пока бесконечности на второй вход (даже после нажатия ввода). Пользователь не знаю, как закончить поток (CMD + d, ...)
3.)
int getInput(){
char input_nods[10];
if(fgets(input_nods, 10, stdin) != NULL)
{
puts(input_nods);
}
char input_c1;
char input_c2;
char input_nod_over;
sscanf(input_nods,"%c %c %c",&input_c1, &input_c2, &input_nod_over);
char *nod_check_1, *nod_check_2;
int input_nod_1 = strtol(&input_c1, &nod_check_1, 10);
int input_nod_2 = strtol(&input_c2, &nod_check_2, 10);
if (input_nod_over != '\0' || input_nods[2] == ' ' || input_nods[2] == '\0')
{
return -1;
}
}
Это отлично работает, когда даны целые числа в диапазоне 0-9. Как только вход имеет две цифры, sscanf
перепутался с пробелом, который fgets
сохранен в input_nodes [].
Есть ли способ, которым я мог бы достичь того, что искал? Спасибо.
Прочитайте документацию 'scanf'. – Olaf
Я собирался написать что-то саркастическое, но потом я нашел то, что искал, глубоко погруженный в какой-нибудь веб-сайт на scanf. Спасибо ^^ –
Комментарии пользователей более высокого уровня - это самое время, о котором стоит подумать. Независимо от того, являются ли они краткими или нет :-) – Olaf