2011-04-27 66 views
-1

我在C語言編程... 我有一個問題看跌信息到一個列表

我有這個輸入: LIS MAD 4 TP001 TP002 TP003 TP004

和我需要什麼做的是掃描的所有信息,並把它放在一個列表...

的事情是,TP的數量是可變的,它可以從1到1000 ...

請幫我...我沒有意識如何做到這一點..

也許一個循環會幫助...我不知道。

我的問題仍然與TP的可變數量。其餘的,我知道...

謝謝!!

+0

在這個例子中沒有了'4'指出了四個'TPs'? – pmg 2011-04-27 18:51:03

+0

-1沒有把你的問題的要求。 – 2011-04-27 19:42:56

回答

0

你需要解釋你在做什麼。 這個輸入在哪裏?

  • 它是你的參數程序? - 所以 你只需要循環通過 參數
  • 或輸入到控制檯? - 使用scanf函數

試圖閱讀:

+0

我的輸入是一個像我之前說過的不同行的大列表。事情是,從一行到另一行,TP的數量可以改變。我正在使用scanf,但是如何告訴他只要有掃描 – 2011-04-27 18:41:26

+0

的信息,LIS和MAD根據TP的數量而改變的數字 – 2011-04-27 18:49:56

+0

@Fred:您可以使用'fgets( )'讀一整行,然後'sscanf()'一點一點地讀。 – pmg 2011-04-27 18:52:08

0

每您的評論。gskspurs' answer,看來你有很多行可變數量的空格分隔字符串?

您需要先使用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

這似乎是一個很好的解決方案!謝謝!唯一的問題是我不知道如何使用'fgets()',關於'sscanf()'是否存儲了它掃描到變量中的內容? – 2011-04-27 19:01:17

+0

如果您知道如何使用'scanf','sscanf'這樣的詞,只不過您提供了一個要掃描的字符串作爲第一個參數。 – 2011-04-27 19:26:16

+0

如果我理解正確,fgets從文件中讀取整行。但是我的輸入文件有多行,而我只想讀取以ap 開頭的文本,例如:p LIS MAD 4 TP001 TP002 TP003 TP004 – 2011-04-27 19:28:39