Пользовательский ввод и вставка в массив - PullRequest
0 голосов
/ 23 октября 2011

Я новичок в C. Мне нужно знать, как запросить ввод пользователя, который может быть произвольным числом слов, и затем поместить символы в массив.

Я знаю, что это не должно быть слишком сложно, но Google просто сбивает меня с толку.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Если я правильно понимаю вашу проблему, вам нужно прочитать пользовательский ввод какого-то неизвестного размера, таким образом, сохранить эту информацию в массиве символов, верно? Если это так, одним из возможных решений было бы иметь массив символов, с которым должен быть назначен фиксированный размер по умолчанию, это динамически перераспределяет его размер на лету.

После зацикливания символов ввода и проверки того, что вы не нажали EOF, вы должны добавить символ в массив. Хитрость заключается в том, чтобы проверить, достаточно ли массив массив для хранения символов из пользовательского ввода. Если нет, вы должны перераспределить размер массива.

Пример реализации решения может выглядеть примерно так:

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

int main()
{
    unsigned int len_max = 128;
    unsigned int current_size = 0;

    char *input = malloc(len_max);
    current_size = len_max;

    printf("\nEnter input:");

    if(input != NULL) {
        int c = EOF;
        unsigned int i = 0;

        // Accept user input until hit EOF.
        while (( c = getchar() ) != EOF) {
            input[i++] = (char)c;

            // If reached maximize size, realloc size.
            if (i == current_size) {
                current_size = i + len_max;
                input = realloc(input, current_size);
            }
        }

        // Terminate the char array.
        input[i] = '\0';

        printf("\nLong String value:%s \n\n",input);

        // Free the char array pointer. 
        free(input);
    }

    return 0;
}

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

С уважением ~ E.

0 голосов
/ 23 октября 2011

Начните усерднее учиться ... Небольшая помощь:

  1. Для печати используйте printf()
  2. Для ввода пользователя используйте scanf() или fgets() (вторая лучшено немного сложнее ...)
...