我在C語言編程... 我有一個問題看跌信息到一個列表
我有這個輸入: LIS MAD 4 TP001 TP002 TP003 TP004
和我需要什麼做的是掃描的所有信息,並把它放在一個列表...
的事情是,TP的數量是可變的,它可以從1到1000 ...
請幫我...我沒有意識如何做到這一點..
也許一個循環會幫助...我不知道。
我的問題仍然與TP的可變數量。其餘的,我知道...
謝謝!!
我在C語言編程... 我有一個問題看跌信息到一個列表
我有這個輸入: LIS MAD 4 TP001 TP002 TP003 TP004
和我需要什麼做的是掃描的所有信息,並把它放在一個列表...
的事情是,TP的數量是可變的,它可以從1到1000 ...
請幫我...我沒有意識如何做到這一點..
也許一個循環會幫助...我不知道。
我的問題仍然與TP的可變數量。其餘的,我知道...
謝謝!!
你需要解釋你在做什麼。 這個輸入在哪裏?
試圖閱讀:
我的輸入是一個像我之前說過的不同行的大列表。事情是,從一行到另一行,TP的數量可以改變。我正在使用scanf,但是如何告訴他只要有掃描 – 2011-04-27 18:41:26
的信息,LIS和MAD根據TP的數量而改變的數字 – 2011-04-27 18:49:56
@Fred:您可以使用'fgets( )'讀一整行,然後'sscanf()'一點一點地讀。 – pmg 2011-04-27 18:52:08
每您的評論。gskspurs' answer,看來你有很多行可變數量的空格分隔字符串?
您需要先使用fgets
來獲取一行,然後使用sscanf
一次一個地獲取每個單詞,直到字符串的末尾(即行的末尾)。
在進一步的評論中,您提到LIS/MAD後的標記描述了跟隨它的詞數。好的,所以你的目標是做到以下幾點:
fgets
來閱讀一條線。sscanf
)sscanf
可讀入整數,即要跟隨的單詞數。 (我們稱這個n
爲討論。)malloc
來分配一個字符串數組(char **
),元素的數量是n
。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);
}
這似乎是一個很好的解決方案!謝謝!唯一的問題是我不知道如何使用'fgets()',關於'sscanf()'是否存儲了它掃描到變量中的內容? – 2011-04-27 19:01:17
如果您知道如何使用'scanf','sscanf'這樣的詞,只不過您提供了一個要掃描的字符串作爲第一個參數。 – 2011-04-27 19:26:16
如果我理解正確,fgets從文件中讀取整行。但是我的輸入文件有多行,而我只想讀取以ap 開頭的文本,例如:p LIS MAD 4 TP001 TP002 TP003 TP004 – 2011-04-27 19:28:39
在這個例子中沒有了'4'指出了四個'TPs'? – pmg 2011-04-27 18:51:03
-1沒有把你的問題的要求。 – 2011-04-27 19:42:56