Поместите информацию в список - PullRequest
0 голосов
/ 27 апреля 2011

Я программирую на языке Си ... У меня проблема

У меня есть этот вход: LIS MAD 4 TP001 TP002 TP003 TP004

и мне нужно отсканировать всю информацию и поместить ее в список ...

Дело в том, что число ТР является переменным, оно может варьироваться от 1 до 1000 ...

Пожалуйста, помогите мне ... Я понятия не имею, как это сделать ..

Может быть, цикл поможет ... Я не знаю.

Моя проблема остается с переменным количеством ТП. Остальное я знаю ...

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

За ваш комментарий для ответа gskspurs , похоже, у вас есть переменное количество строк, разделенных пробелом, во многих строках?

Вам нужно начать с использования fgets, чтобы получить одну строку, а затем используйте sscanf, чтобы получить каждое слово по одному, до конца строки (т. Е. До конца строки).

В следующем комментарии вы упомянули, что токен после LIS / MAD описывает, сколько слов следует за ним.Итак, ваша цель состоит в том, чтобы сделать следующее:

  1. Читать строку, используя fgets.
  2. Читать слова "LIS" и "MAD" и делать то, что вам нужноделать с ними (или игнорировать их).(Вы можете использовать sscanf)
  3. Используйте sscanf, чтобы прочитать целое число, количество слов для подражания.(Давайте назовем это n для этого обсуждения.)
  4. Используйте malloc, чтобы выделить массив строк (тип char **), количество элементов составляет n.
  5. Прочитайте слово и сохраните его в массив строк, n раз.

Дайте мне знать, если вам нужно разъяснение.

Вот краткий пример:

#define LINE_SIZE 1024

char line[LINE_SIZE];     /* Unfortunately you do need to specify a maximum line size. */

while (fgets(line, LINE_SIZE, stdin) != NULL)
{
    /* If we're here, a line was read into the "line" variable. We assume the entire line fits. */

    char lis_string[4];
    char mad_string[4];
    int num_words;
    int offset;

    char **word_array;

    sscanf(line, "%s %s %d %n", lis_string, mad_string, &num_words, &offset);

    /* Allocate memory for num_words words */
    word_array = malloc(sizeof(*word_array) * num_words);

    int i;
    for (i = 0; i < num_words; ++i)
    {
        int chars_read;

        /* Allocate space for each word. Assume maximum word length */
        word_array[i] = malloc(sizeof(*word_array[i]) * 16);

        sscanf(line + offset, "%s %n", num_words[i], &chars_read);
        offset += temp;
    }

    /* Do something with the words we just got, maybe print them or add them to a file */
    do_something_with_words(lis_string, mad_string, num_words, word_array);

    /* At the end of this loop, lis_string/mad_string/num_words are out of scope, and
       will be overwritten in next loop iteration. We need to free up the word_array
       to make sure no memory is leaked. */

    for (i = 0; i < num_words; ++i)
    {
        free(word_array[i]);
    }
    free(word_array);
}
0 голосов
/ 27 апреля 2011

Вам нужно объяснить, что вы делаете.Где этот ввод?

  • Это аргументы для вашей программы?- То есть вам просто нужно перебрать аргументы
  • или ввести в консоль?-Используйте scanf

Попытка чтения:

...