Получение нескольких значений с помощью scanf()

Я использую scanf() для получения набора целых чисел от пользователя. Но я хотел бы, чтобы пользователь предоставил все 4 целых числа сразу вместо 4 разных подсказок. Я знаю, что могу получить одно значение, выполнив:

scanf( "%i", &minx);

Но я хотел бы, чтобы пользователь мог сделать что-то вроде:

Enter Four Ints: 123 234 345 456

Можно ли сделать это?


person Josh Curren    schedule 11.09.2009    source источник
comment
@Josh Curren %d преобразует ввод, как будто это десятичное представление. %i преобразует ввод, как если бы это была десятичная, шестнадцатеричная или восьмеричная строка, используя обычные начальные 0, 0x, 0X для перехода к восьмеричной или шестнадцатеричной системе. Пример: 010 преобразуется по-разному.   -  person chux - Reinstate Monica    schedule 15.11.2013


Ответы (6)


Вы можете сделать это с помощью одного вызова, например:

scanf( "%i %i %i %i", &minx, &maxx, &miny, &maxy);
person Reed Copsey    schedule 11.09.2009
comment
p.s. хороший выбор имен переменных :) - person Jonathan Graehl; 11.09.2009
comment
вы можете использовать %d %i %o %x %X для целых чисел.. montcs.bloomu.edu/~bobmon/Information/LowLevel-Programming/ - person Josh Curren; 11.09.2009
comment
%d почти идентичен %i. Они делают то же самое в большинстве случаев. - person Chris Lutz; 11.09.2009
comment
@Chris: при каких обстоятельствах %i не делает того, что делает %d? - person Jonathan Leffler; 11.09.2009
comment
@Jonathan Leffer - Согласно моей справочной странице scanf, %i считывает int с основанием 16, если оно начинается с 0x, и с основанием 8, если оно начинается с 0, и с основанием 10 в противном случае. %d всегда читается в базе 10. И справочная страница Open Group согласна с моей. - person Chris Lutz; 11.09.2009
comment
@wrang-wrang: Да, так и должно быть. Обычно, если вы будете использовать %d, если вы не ожидаете ввода числовых данных, отличных от 10. - person Reed Copsey; 12.09.2009

Да.

int minx, miny, maxx,maxy;
do {
   printf("enter four integers: ");
} while (scanf("%d %d %d %d", &minx, &miny, &maxx, &maxy)!=4);

Цикл предназначен только для демонстрации того, что scanf возвращает количество успешно прочитанных полей (или EOF).

person Jonathan Graehl    schedule 11.09.2009
comment
Единственная проблема с этим кодом заключается в том, что если пользователь вводит только 1 значение, то в следующем цикле ему придется повторно ввести все 4 значения. - person Jonathan Leffler; 11.09.2009
comment
Это превратится в бесконечный цикл, если я введу неверные данные (например, символы) - person Spikatrix; 08.05.2015
comment
@CoolGuy, тогда не делай этого. - person ; 30.11.2015

Просто чтобы добавить, мы также можем использовать массив:

int i, array[4];
printf("Enter Four Ints: ");
for(i=0; i<4; i++) {
    scanf("%d", &array[i]);
}
person Rohit Kumar Pradhan    schedule 22.09.2020

Можно было бы сделать это, но тогда пользователь должен разделить числа пробелом:

#include "stdio.h"

int main()
{
    int minx, x, y, z;

    printf("Enter four ints: ");
    scanf( "%i %i %i %i", &minx, &x, &y, &z);

    printf("You wrote: %i %i %i %i", minx, x, y, z);
}
person l3dx    schedule 11.09.2009
comment
пользователь должен разделять числа пробелом, это не так. Пользовательский ввод может быть 12-34+56-78. - person chux - Reinstate Monica; 03.04.2015

Приемлемо для получения нескольких значений с помощью scanf()

int r,m,v,i,e,k;

scanf("%d%d%d%d%d%d",&r,&m,&v,&i,&e,&k);
person R.M.VIVEK ARNI    schedule 14.10.2014

Вопрос старый, но если кто-то может помочь с этим на реальном примере.

Для одиночных входных данных -

int number;
printf("Please enter number : ");
scanf("%d", &number);

Для нескольких входных данных в строке -

int number1, number2;
printf("Please enter numbers one by one : ");
scanf("%d %d", &number1, &number2);
  • %d %d для десятичного формата. Вы можете использовать формат, который подходит для вашего типа данных, столько раз, сколько вам нужно, всего лишь с space
  • &number1, &number2 - Используйте comma между именами переменных

Если вам нужен более реальный пример, проверьте этот практический пример - https://devsenv.com/tutorials/how-to-take-input-and-output-in-c-programming

Надеюсь, это поможет кому-то.

person Maniruzzaman Akash    schedule 02.06.2021