特定の入力を受け取り、動的に割り当て、出力し、解放する単純なプログラムを作成しようとしています。問題は、それが正しく出力されないことです。入力のスタイルは次のとおりです。
最初の行は、私が読む必要がある行の数です - i.
それからi行があります。各行で 1 つの単語を読み、次に整数がいくつ続くかを示す整数 n を読み、次に n 個の整数が続きます。
例えば、
2
yellow 2 32 44
green 3 123 3213 3213
説明:
1 行目 - 2 行が必要です。
2 行目と 3 行目 - 単語 + 整数の数 + 整数。
私の試み:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j;
int n; /* n - number of words */
char **words; /* words - array of keywords */
int **data;
scanf ("%d\n", &n);
words = (char **) malloc (n * sizeof (char *));
data = (int **) malloc (n * sizeof (int *));
for (i = 0; i < n; ++i)
{
words[i] = (char *) malloc (sizeof (char));
for (j = 0 ;; ++j)
{
words[i] = (char *) realloc (words[i], sizeof (char) * (j + 2));
scanf ("%c", &words[i][j]);
if (words[i][j] == ' ')
break;
else if (words[i][j] == '\n')
--j;
}
words[i][j] = '\0';
data[i] = (int *) malloc (sizeof (int));
scanf ("%d", &data[i][0]);
for (j = 0; j < data[i][0]; ++j)
{
data[i] = (int *) realloc (data[i], sizeof (int) * (j + 2));
scanf ("%d", &data[i][j]);
}
}
for (i = 0; i < n; ++i)
{
printf ("%s ", words[i]);
printf ("%d ", data[i][0]);
for (j = 0; j < data[i][0]; ++j)
{
printf ("%d ", data[i][j]);
}
printf ("\n");
}
for (i = 0; i < n; ++i)
{
free (words[i]);
free (data[i]);
}
free (words);
free (data);
return 0;
}