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


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

今天上網查了下,說可以用ungetc()函數將字符送回輸入流,在這里總結歸納一下

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

先貼上代碼:

 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語句外面可以減少循環次數

但是用其他符號作為分隔符的時候只能放在if語句中,不然會出錯

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

 

  1. 如果預先可以估計數組的大小,那么可以比估計的數值定義的稍大一些即可
  2. 如果無法預知,我的解決辦法就是使用鏈表,但是這樣就無法使用數組的一些特性,比如可能會花很多的時間去尋找某一下標的數據
  3. 另外我想到的就是犧牲存儲空間的辦法,先用鏈表將數據存起來,並記錄個數。如果后面需要多次利用下標訪問數據的話,可動態分配一塊內存來存儲數據,並將原來的鏈表釋放,或根據需要保留
  4. 除此之外也沒想到有什么好的方法。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM