Re: [問題] 遇到換行結束輸入 in C

看板C_and_CPP作者 (瑪利歐)時間15年前 (2009/05/05 16:18), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串3/4 (看更多)
※ 引述《FrankTrjpp (請給我前叉)》之銘言: : 很抱歉問了一個笨問題 : 可是剛才打關鍵字沒找到相關方法 (不然就是找到C++的 = =a ) : 就是 : 我要讀入一串數字(是int 不超過10個) : 可能只有2個也可能有10個,結束輸入於換行符號 : 請問要怎麼寫呢? : 找到最接近的方法是gets()讀入string : 然後用sscanf去讀 : 不過因為沒用過sscanf所以剛才sigmentation fault了XD : 有更好的方法或者是正確的使用法嗎@@ : 繼續辜狗中... 這種測資讀法比較正常的方法是 gets() + strtok(): #include<cstdio> #include<cstring> #define N 50 int main() { int n,num[N]; char s[N]; while( gets(s) ) { int count = 0; for( char *p = strtok(s," "); p ; p = strtok(NULL," "), count++ ) sscanf( p,"%d",&num[count] ); printf("%d\n",count); for( int i=0;i<count;i++ ) printf("%d ",num[i]); puts(""); } } 附上一種特別的用法,用 sscanf() 的回傳值計算個數 #include<cstdio> #include<cstring> #define N 50 int main() { int n,num[N]; char s[N]; while( gets(s) ) { int count = 0; n = sscanf( s,"%d%d%d%d%d%d%d%d%d%d", &num[0],&num[1],&num[2],&num[3],&num[4], &num[5],&num[6],&num[7],&num[8],&num[9] ); printf( "%d\n",n ); } } 不過缺點就是後面的引數列要一個一個打, 數字不大的時候不失為一個好方法啦~ //此處 n 就是成功讀入的變數個數 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.161.124.7

05/05 16:24, , 1F
別用 gets, 改用 fgets 避免 buffer overrun 的問題
05/05 16:24, 1F
文章代碼(AID): #19__PWZx (C_and_CPP)
文章代碼(AID): #19__PWZx (C_and_CPP)