c語言輸入一行未知個數數字存入數組

一直有個疑問輸入一行數字存入數組時若不知道數字的個數怎麼辦,最容易想到的辦法就是接收字符而後轉化爲數字,但這樣太過麻煩。git

今天上網查了下,說能夠用ungetc()函數將字符送回輸入流,在這裏總結概括一下數組

此外還意外的解決了另一些之前遇到的問題,也是在調試代碼時發現的,用此段代碼能夠用除了空格之外的字符做爲分隔符,並且分隔符的長度也能夠很長:如輸入12qwertyuiop34asdfghjkl123,23zxc45  最後獲得的數組爲:a[0]=12,a[1]=34,a[2]=123,a[3]=23,a[4]=45函數

先貼上代碼:ui

 1 #include<stdio.h>
 2 #include<ctype.h>
 3 int main()
 4 {
 5     int a[1000];
 6     char c;
 7     int i=0;
 8     int n=0;
 9     while((c=getchar())!='\n')
10     {
11         if(isdigit(c))
12         {
13             ungetc(c,stdin);//將c送回輸入流
14             scanf("%d",&a[n++]);
15         }
16     }
17     for(i=0;i<n;i++)
18     {
19         printf("%d ",a[i]);
20     }
21     return 0;
22 }

這裏要說明一下,在使用空格做爲分隔的時候把14行的scanf函數放到if語句外面能夠減小循環次數spa

可是用其餘符號做爲分隔符的時候只能放在if語句中,否則會出錯調試

這裏又有另外一個問題了,一開始怎麼知道數組的長度,定義多少合適呢?code

 

  1. 若是預先能夠估計數組的大小,那麼能夠比估計的數值定義的稍大一些便可
  2. 若是沒法預知,個人解決辦法就是使用鏈表,可是這樣就沒法使用數組的一些特性,好比可能會花不少的時間去尋找某一下標的數據
  3. 另外我想到的就是犧牲存儲空間的辦法,先用鏈表將數據存起來,並記錄個數。若是後面須要屢次利用下標訪問數據的話,可動態分配一塊內存來存儲數據,並將原來的鏈表釋放,或根據須要保留
  4. 除此以外也沒想到有什麼好的方法。。。
相關文章
相關標籤/搜索