我用C语言编程...... 我遇到了问题
我有这个输入: LIS MAD 4 TP001 TP002 TP003 TP004
我需要做的是扫描所有信息并将其放在列表中......
问题是,TP的数量是可变的,它可以从1到1000 ......
请帮助我......我没有想法如何做到这一点..
也许一个循环会有所帮助......我不知道。
我的问题仍然是可变数量的TP。剩下的,我知道......
谢谢!
答案 0 :(得分:0)
你需要解释你在做什么。 这个输入在哪里?
尝试阅读:
答案 1 :(得分:0)
根据您对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);
}