[問題] 請問有關於sscanf

看板C_and_CPP作者 (怪盜狂史)時間10年前 (2013/10/03 15:10), 編輯推噓0(005)
留言5則, 3人參與, 最新討論串1/1
我最近在用C/C++開發程式,正準備要寫一個讀取檔案的函數 假設有一行我想要讀入兩筆資料 123 321 我是寫成 fgets(line, sizeof(line), INPUT); check=sscanf(line,"%d %d", &a, &b); if(check==2) printf("read line succeed"); else printf("error in inputfile"); 這樣子可以避免輸入資料不足(ex:只有輸入123) 或著資料類別錯誤(ex:123 abc)的狀況 但是萬一資料比預設讀取的要多的時候,該怎麼寫會比較好呢? 比方說使用者輸入的資料是123 321 456這三筆資料(或三筆以上), 雖然我寫的程式可以正確讀到前兩筆資料,第三筆之後的資料會忽視掉 但是我想要提醒使用者去檢查輸入檔,此時該怎麼做呢 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.122.45

10/03 15:46, , 1F
改用strsep(非標準但比較好用)或strtok(標準函式)
10/03 15:46, 1F

10/03 16:03, , 2F
大二還不會用yacc時只好用strtok寫出整個macro assembler
10/03 16:03, 2F

10/03 16:04, , 3F
現在想想,這也是理所當然的事...
10/03 16:04, 3F

10/03 17:04, , 4F
最後加一個%s吧剩下的吃掉,再檢查%s讀到的內容
10/03 17:04, 4F
我想到方法了,不用檢查%s讀到的內容, 因為如果最後一個位元是換行或是空格%s也抓不著, 此時檢查sscanf的回傳值即可 check=sscanf(line,"%d %d %s",&a,&b,&c); 如果input是 123 321,只能抓到前兩個,check =2, 123 321 ,雖然比前一個例子多了一個空格,但還是只抓到兩組資料,check=2, 123 321 12345,抓到三組資料,所以check=3, 只要check!=2,就算是不常規的輸入資料 ※ 編輯: BANDITCS 來自: 140.114.122.45 (10/03 17:21)

10/04 01:58, , 5F
istringstream
10/04 01:58, 5F
文章代碼(AID): #1IJHXe9m (C_and_CPP)