Задать вопрос
@rifat2125

Как считывать несколько переменных в языке C?

Здравствуйте!
Я решаю сейчас задачи по программированию, обучаюсь. Мне попалась задача, в которой считываются 3 переменные: ширина, высота, глубина.
Считываю я их так:
data_input = scanf("%i %i %i", &width, &height, &depth);

Для меня загвоздка в том, что на вход может поступить как 3 переменные, так и 2. Может и 1 переменная только поступить. Как считывать в таком случае?

Просто сейчас, если я ввожу только одну переменную, программа ожидает ввода дальше.
  • Вопрос задан
  • 2832 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Я правильно понимаю, что пользователь вводит от 1 до 3 чисел в строке и ожидает, что программа эти числа обработает и выведет результат? Иными, словами, программа реагирует на клавишу enter?

Можно читать символы по одному через getch(), пока не прочитаете '\n'. По пути нужно парсить числа. Если символ цифра - то умножйте текущее число на 10 и прибавляйте цифру (помните, что (int)'0' != 0. Но символы цифры, слава богу, идут подряд в алфавите). Если прочитали пробел - переходите к следующему числу. Или, чтобы обрабатывать всякие много пробелов, лишние символы и другие проблемы ввода - лучше прочитать сразу же всю строку через fgets() и потом в ней уже парсить числа.
Ответ написан
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Думай о юзере своей программы! Юзер - идиот! А ты ему загадки загадываешь, требуя ввести непонятно что.

Во-первых, юзера надо предупредить о том, что сейчас от него ожидается ввод. Во-вторых, инициализировать области и если там нуль (ничего не ввели), выдавать ошибку и на повторный запрос
int a = 0, b = 0, c = 0;

for(;;)
 {
   printf("Введите ширину, высоту и глубину: "); // printf - чтобы перевода строки не было
   scanf("%d %d %d", &a, &b, &c);

   if ((a) && (b) && (c)) // сокращенная форма записи if (a != 0) ...)
     break;
    else
       printf("Неверно, попробуйте еще раз\n");
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы