我一直在閱讀關於如何在事先不知道它的大小時如何聲明一個數組。據我所知,實現它的方法是爲用戶輸入的數組分配一些內存,然後根據需要重新分配或釋放內存。對於字符數組,我做了這種方式:如何允許用戶輸入沒有初始大小的數組?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//allocation of memory
char *a = malloc(200 * sizeof(char));
//allow user input
fgets(a, 200, stdin);
int i = 0;
//find the length of the array
int lstring = strlen(a);
printf("%d", lstring-1);
free(a);
return 0;
}
在這裏,用戶不輸入字符數組的實際大小,但它可以通過查看結束的位置是已知的字符串字符。
在另一方面,對於整數數組我有這樣的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//allocation of memory
int *b = malloc(200 * sizeof(int));
b[0] = 2;
b[1] = 76;
b[2] = 123;
printf("%d", b[0]);
free(b);
return 0;
}
我的問題是,我怎麼能允許用戶輸入整數?
我想到的第一件事是創建一個for
循環與scanf()
,但是這是行不通的,除非允許用戶首先輸入數組的大小。有沒有一種方法(相當於或不是一個字符數組注意到的)這樣做而不讓用戶明確輸入大小?
@WeatherVane Ups!我的意思是'int * b = malloc(200 * sizeof(int));' – Jazz
請看看使用'realloc'來擴展數組。 –
忽略一秒鐘的代碼,您希望從用戶的角度來看它的工作方式?他們是否希望在同一行輸入所有數字?還是有某種「我完成了」的指標,他們應該鍵入?也許Ctrl-D/Ctrl-Z發信號結束文件? –