想必您以後可以訪問這些數組。
事實上,當你下一個(當然,如果它是一個更大的應用程序會導致內存泄漏),你將丟失指向前一個數組的指針。
您需要分配一個int *
(一組int
指針)的卡盤,然後將每個指針存儲在那裏int
指針。
技巧是......如果你不知道你需要多少個數組,你需要你的代碼是動態的(例如;分配一些空間,然後分配更多,如果你用完)。
另一種選擇是,您可以限制用戶可以輸入的系列數量,並告訴他們在達到系列時已完成。
這裏的一些幫助,如果你想去後者路線:
int i;
int n = 1;
int **myArrayOfArrays = malloc(sizeof(int*) * 5); /* max of 5 arrays */
int *arr;
int arrayCount = 0;
while(n != 0) {
scanf("%d", &n);
if(n == 0)
break;
else {
if (arrayCount == 4) {
printf("Woah there partner! That's enough!\n");
break;
}
else
{
arr = malloc(sizeof(int) * n);
for(i = 0; i < n; i++)
scanf("%d", &arr[i]);
myArrayOfArrays[arrayCount] = arr;
arrayCount++;
}
} //end if
} //end while
無論其...現在你不知道每個數組有多長。這是一個問題。您需要跟蹤這些信息,或者使用動態結構(如鏈接列表)。在下面的例子中,我們添加的長度每個陣列的第一個元素:
int main()
{
int i;
int n = 1;
int **myArrayOfArrays = malloc(sizeof(int*) * 5);
int *arr;
int arrayCount = 0;
while(n != 0) {
scanf("%d", &n);
if(n == 0)
break;
else {
if (arrayCount == 4) {
printf("Woah there partner! That's enough!\n");
break;
}
else
{
arr = malloc(sizeof(int) * (n + 1)); /* one more than we need */
arr[0] = n; /* store the array length in the first element */
for(i = 1; i <= n; i++)
scanf("%d", &arr[i]);
myArrayOfArrays[arrayCount] = arr;
arrayCount++;
}
} //end if
} //end while
int j;
for (i = 0; i < arrayCount; i++)
{
int length = myArrayOfArrays[i][0]; /* retrieve the length */
for (j = 1; j <= length; j++)
printf("%d ", myArrayOfArrays[i][j]);
printf("\n");
}
}
動態使用數組分配/原始內存意味着你需要跟蹤的東西。更好的方法是使用鏈接列表來處理數據。在這種情況下,您可以有一個鏈接的節點列表,每個節點都包含一個整數鏈接列表。
解釋您提交的代碼失敗的原因。在示例中輸入序列時不會退出嗎? –
使用'break'語句而不是'exit'。這保證在while循環後執行任何其他代碼。 – Mahesh