Как заставить scanf принимать только целые числа? - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок в c, и мне было интересно, возможно ли что-то подобное,

Я пытаюсь записать ввод в виде координаты. Пользователь вводит координату, подобную (3,4), и программа сканирует ввод как 3 и 4, записанные в переменной cor1, cor2 соответственно.

Я пытаюсь получить вывод, подобный этому:

Enter coordinates: (3,4)

3 4                           /*printf("%d %d",cor1,cor2)*/

Возможно ли это?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 15 апреля 2020

Конечно, это возможно.

Используйте те же спецификаторы формата, что и при вызове printf() для scanf() и поместите , (запятую) между обоими спецификаторами формата:

printf("Enter coordinates: ");

scanf("%d,%d", &cor1, &cor2);

Обратите внимание, что для сохранения десятичных значений оператором амперсанда & должен предшествовать объектам, чтобы получить адрес соответствующих объектов, который отличается от вызова printf() и требуется для scanf().

Также всегда проверяйте возвращаемое значение scanf(), если при сканировании произошла ошибка:

if(scanf("%d,%d", &cor1, &cor2) != 2)
{
     print("Error at scanning!");
}
0 голосов
/ 15 апреля 2020

Функция scanf() сканирует ввод с консоли. Чтобы получать входные данные из консоли, вам нужно указать, какой тип входных данных вы хотите получить. Для значений int мы используем спецификатор формата %d, чтобы указать, что мы будем вводить значение int в качестве нашего ввода.

Теперь отвечаем на ваш вопрос: как вы хотите прочитать входные данные из пользователь? Должен ли пользователь вводить только 3 4 или (3,4)? Давайте обсудим каждый сценарий ios:

  • Случай 1

Здесь пользователь будет вводить 3 4.

int cor1, cor2;
printf("Enter coordinates: ");
scanf("%d %d", &cor1, &cor2);
printf("%d %d", cor1, cor2);
  • Случай 2

Здесь пользователь будет вводить (3,4). Прежде чем вводить код, обратите внимание, что есть 3 избыточных значения char: ( , ). Нам нужно отбросить эти символы из нашего ввода. Как вы знаете, мы используем %c для ввода значения char с консоли. Чтобы отбросить эти избыточные символы, мы просто используем спецификатор формата %*c.

int cor1, cor2, valueInput;
printf("Enter coordinates: ");

valueInput=scanf("%*c %d %*c %d %*c", &cor1, &cor2);
if(valueInput==2){
    printf("%d %d", cor1, cor2);
}else{
    printf("Failed to parse inputs");
}

Это позволит вам ввести (3,4) и вывести 3 4. Чтобы добавить дополнительную проверку, мы также проверяем значение return scanf(). Если вы не знакомы со значением return, взгляните на: Здесь . Функция scanf() возвращает количество успешных входов. В качестве дополнительной проверки мы также проверяем значение return scanf(). В первом случае я пропустил чек, чтобы вы не запутались. Для получения дополнительной информации посмотрите:
Спецификаторы формата: w3schools
Форматированный ввод / вывод: overiq

0 голосов
/ 15 апреля 2020

scanf, безусловно, ответ здесь:

int cor1,cor2;
int num_parsed = scanf("(%d,%d)",&cor1,&cor2);
if(num_parsed != 2)
    printf("Failed to parse coords!\n");
else
    printf("%d %d",cor1,cor2);

Возьмите go при этом.

...