C - прочитать строку чисел

Я хочу прочитать строку чисел (только intigers), которую я не знаю, а также я не знаю, сколько из этих чисел мне нужно будет прочитать. Каждый будет разделен пробелом. Так что это лучший способ сделать это?

Вам не нужно писать мне код или что-то в этом роде, я просто хочу знать, что мне следует использовать.

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
39
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете читать по буквам. Каждый раз, когда вы находите число (символы от 48 до 57), добавляйте его во временную строку. Когда у вас есть пробел, попробуйте разобрать созданную строку. Затем опустошите его. И продолжайте это до конца большой струны.

Спасибо, одна из моих мыслей была что-то похожее, по крайней мере я теперь, что это будет работать.

Willy 16.11.2018 22:33
Ответ принят как подходящий

Я думаю, что это может сработать

int main(){

    char name[100];
    printf("Insert numbers: ");
    fgets(name, 100, stdin);
    printf("Your numbers: %s\n", name);
    return 0;
}

Вы должны читать в цикле, пропуская пробелы (см. isspace(3)), и во внутреннем цикле, while (isdigit(getchar())) (см. isdigit(3)).

Я напишу код (если вы не хотите, чтобы вас испортили, не читайте ниже, пока не будете удовлетворены своим решением):

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

/* this macro calculates the number of elements of an array.
 * you must be carefull to always pass an array (not a pointer)
 * to effectively get the number of elements */
#define SIZE(arr) ((sizeof arr) / (sizeof arr[0]))

int main()
{
    int n = 0;
    int a[100];
    /* this has to be an int (not a char) see getchar() manpage */
    int last_char = 0;

    /* while n < number of elements of array a */
    while (n < SIZE(a)) {

        /* read the character into last_char and check if it is
         * a space, tab or newline */
        while (isspace(last_char = getchar()))
            continue;
        /* last_char is not a space, it can be EOF, a minus sign,
         * a digit, or something else (not a number) */

        if (last_char == EOF)
            break; /* exit the outer loop as we got no more input data */

        int neg = (last_char == '-'); /* check for negative number */
        if (neg) last_char = getchar(); /* advance */

        /* check for digits */
        if (isdigit(last_char)) {
            /* digits are consecutive chars starting at '0'.  We are 
             * assuming ASCII/ISO-LATIN-1/UTF-8 charset. This doesn't
             * work with IBM charsets. */
            int last_int = last_char - '0';
            while (isdigit(last_char = getchar())) {
                last_int *= 10;  /* multiply by the numeration base */
                last_int += last_char - '0'; /* see above */
            }
            /* we have a complete number, store it. */
            if (n >= SIZE(a)) { /* no more space to store numbers */
                fprintf(stderr,
                    "No space left on array a. MAX size is %d\n",
                    SIZE(a));
                exit(EXIT_FAILURE);
            }
            if (neg) last_int = -last_int;
            a[n++] = last_int;
        }

        /* next step is necessary, because we can be on a terminal and
         * be able to continue reading after an EOF is detected.  Above
         * check is done after a new read to the input device. */
        if (last_char == EOF)
            break;
    } /* while (n < SIZE(a) */

    printf("Number list (%d elements):", n);
    int i;
    for (i = 0; i < n; i++) {
        printf(" %d", a[i]);
    }
    printf("\n");
    exit(EXIT_SUCCESS);
} /* main */

Другие вопросы по теме