将信息放入列表中

时间:2011-04-27 18:07:09

标签: c list variables

我用C语言编程...... 我遇到了问题

我有这个输入: LIS MAD 4 TP001 TP002 TP003 TP004

我需要做的是扫描所有信息并将其放在列表中......

问题是,TP的数量是可变的,它可以从1到1000 ......

请帮助我......我没有想法如何做到这一点..

也许一个循环会有所帮助......我不知道。

我的问题仍然是可变数量的TP。剩下的,我知道......

谢谢!

2 个答案:

答案 0 :(得分:0)

你需要解释你在做什么。 这个输入在哪里?

  • 你的节目参与了吗? - 所以 你只需循环遍历 参数
  • 或输入控制台? - 使用scanf

尝试阅读:

答案 1 :(得分:0)

根据您对gskspurs' answer的评论,您似乎在许多行上都有可变数量的以空格分隔的字符串?

您需要先使用fgets获取一行,然后使用sscanf一次一个地获取每个单词,直到字符串结尾(即结束线)。

在进一步的评论中,您提到LIS / MAD之后的令牌描述了跟随它的单词数量。好的,所以你的目标是做到以下几点:

  1. 使用fgets读取一行。
  2. 阅读“LIS”和“MAD”字样,然后执行您需要做的事情(或忽略它们)。 (您可以使用sscanf
  3. 使用sscanf读取整数,即要遵循的单词数。 (我们将此n称为此讨论。)
  4. 使用malloc分配字符串数组(类型char **),元素数量为n
  5. 读取一个单词并将其存储到字符串数组中n次。
  6. 如果您需要澄清,请告诉我。


    以下是一个快速示例:

    #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);
    }