Чтение различных входных данных из стандартного ввода - PullRequest
1 голос
/ 16 июня 2019

Я читаю со стандартного ввода.Пользователю предлагается набрать одну цифру или три.Какие функции хороши в этой проблеме?

Я пробовал

    int in[3] = {-1, -1, -1};
    scanf("%d %d %d", &in[0], &in[1], &in[2]);
    printf("%d, %d, %d\n", in[0], in[1], in[2]);

Это прекрасно работает для трех цифр, но не для ввода только одной.

Я хочу получить, например,входное значение должно быть «17» или «0 1 9». Выход должен быть, например,

int amount = 1
int digits[3] = {17, -1, -1}

или

int amount = 3
int digits[3] = {0, 1, 9}

1 Ответ

4 голосов
/ 16 июня 2019

Вы близки к тому, что вы хотите, но вы читаете int вместо строки, поэтому

 char *in[3] = {-1, -1, -1};

должно быть

int in[3] = {-1, -1, -1};

также позволяет иметь -1 в качестве допустимых начальных значений.

Это прекрасно работает для трех цифр, но не для ввода только одной.

делая scanf("%d %d %d", &in[0], &in[1], &in[2]);, чтобы завершить, вам нужно ввести 3 действительных int или завершить при erro ro достичь EOF или дать неверный ввод, чтобы иметь возможность ввести только одно значение, выполните fgets затем _a __sscanf_

Я хочу, например, входное значение должно быть «17» или «0 1 9». Выход должен быть, например,

int amount = 1
int digits[3] = {17, -1, -1}

или

int amount = 3
int digits[3] = {0, 1, 9}

сделать например

#include <stdio.h>

int main(void)
{
  char line[32];

  if (fgets(line, sizeof(line), stdin) == line) {
    int ints[3] = { -1, -1, -1 };
    int amount = sscanf(line, "%d %d %d", &ints[0], &ints[1], &ints[2]);

    printf("%d : { %d %d %d }\n", amount, ints[0], ints[1], ints[2]);
  }

  return 0;
}

Компиляция и исполнения

pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
pi@raspberrypi:/tmp $ ./a.out
17
1 : { 17 -1 -1 }
pi@raspberrypi:/tmp $ ./a.out
0 1 9
3 : { 0 1 9 }
pi@raspberrypi:/tmp $ ./a.out
1 a
1 : { 1 -1 -1 }
pi@raspberrypi:/tmp $ ./a.out
a
0 : { -1 -1 -1 }
pi@raspberrypi:/tmp $ 
pi@raspberrypi:/tmp $ ./a.out

-1 : { -1 -1 -1 }
pi@raspberrypi:/tmp $ 

(в последнем случае это пустая строка, например, просто введите )

Я переименовал цифры в дюймы , потому что цифры предположим, что каждая запись является цифрой (например, '0'), а вы хотите целые числа

...