C 實現不定長陣列輸入(不需要定義分配空間大小)

2021-09-10 08:06:37 字數 1109 閱讀 7235

問題:比如:要輸入1 2 3 4 5 6 ......一串整型資料,不知道要輸入資料的長度是多少,現在要存到乙個陣列中,怎麼辦?

換一種說法就是,其實懶懶的我在想c++能不能實現python裡

array=input();
這種非常簡單的、不需要確定陣列長度就能輸入一串數字存起來的效果

網上的一些辦法:

malloc方法,其實也要說明分配空間的大小;

直接定義乙個較大的陣列,這不是我想要的,因為我不知道自己要輸入多少個數字,萬一超過了呢,而且這種辦法也浪費了多餘空間;

用realloc 追加空間是重新找一塊大的記憶體,再將原先的資料複製到新記憶體中,但這個函式實現了多個功能,很容易出bug

通過一些字串函式來處理,最後轉化為陣列

後來通過查詢,發現了一種比較滿意的方法,利用了while(cin>>value)和stl中的vector

cin對於空格、回車等空白字元是忽略的,所以在這裡需要輸入乙個非數字來結束輸入。

talk is cheap,show me the code

#include #include using namespace std;

int main()

{ int sum=0,value=0;

vectortest;

//實際上非數字就會結束迴圈

cout<<"以*號作為結束;";

while(cin>>value)

test.push_back(value);

vector::iterator it;

for (it=test.begin();it!=test.end();it++)

cout<<*it《以前從來沒這樣寫過,我們知道cin是乙個istream流物件,而》運算子返回左邊的物件,也就是說cin>>val返回的是cin流物件。

當我們使用乙個istream物件作為條件時,其效果是檢測流的狀態。如果流是有效的,即流未遇到錯誤,那麼檢測成功。當遇到檔案結束符,或遇到乙個無效輸入時,istream物件的狀態會變成無效。處於無效的istream物件為使條件為假。因此,while迴圈一直會執行,直到遇到檔案結束符或者錯誤。

因此輸入eof/ctrl+z 或者非法字元就能退出迴圈。

C 陣列的定義,不定長的陣列?

首先,在這裡我要說明的是,c 中,定義了陣列,那麼就必須為其指定長度,且他的長度確定,不能夠更改。一旦定義乙個陣列,那麼作業系統就在記憶體中給這個陣列指定了一塊記憶體,他是不支援動態分配儲存空間的。能夠動態分配儲存空間的是集合。下面給出幾個陣列的定義 int number new int 10 定義...

如何使用C語言定義不定長陣列 動態陣列

寫程式的時候經常要定義這樣乙個陣列,要前面程式執行後才能知道陣列的大小,然而c語言不支援直接定義不定長陣列的定義,但是我們可以通過動態陣列實現乙個不定長度的陣列。include include 要使用malloc是要包含此標頭檔案 include 要使用memset是要包含此標頭檔案 intmain...

c語言中不需要中間變數就能實現兩個數交換的幾種演算法

第一類方法也是常用的方法,通過多次的數值計算來完成交換,到現在知道的有下面三種 1 加減法。a a b b a b a a b 該方法可以交換整型和浮點型數值的變數,但在處理浮點型的時候有可能出現精度的損失,例如對資料 a 3.123456 b 1234567.000000 交換後各變數值變為 a ...