[問題] scanf輸入一串逗號隔開的數字問題

看板C_and_CPP作者 (人人)時間8年前 (2017/12/13 23:37), 編輯推噓2(2017)
留言19則, 7人參與, 8年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) s codeblocks 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)s 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 各位版大們好,小弟在寫binary search tree的時候,竟然一開始在輸入數據的部分就遇到問題orz,因為題目規定輸入形式要以 「1,2,3,7,12,0,21」這種形式餵給程式,也就是你輸入這串後,程式會開始一個一個數字安插進二元搜尋樹中。 我的想法是寫成: while(scanf("%d,", &num) != EOF) { statement; } 這樣子,裡面statement是把num分別插進樹中。不過我這樣寫以後,用printf測試結果,數字都有讀到,不過我輸入完一串數據後,程式還是一直在等我輸入下一筆,除非我輸入非數字字元才會停止等待。 ex:10,12,31,42 輸出: 10 12 31 42 然後游標一直閃,就是等我輸入下一筆,可是我只要這一筆就夠了,不想一直在等待輸入的狀態。 有想過用sscanf分析,不過因為測資的數字數量不一定,所以好像不能用sscanf... 餵入的資料(Input):s like 10,21,13,4,15 預期的正確結果(Expected Output):s 輸入完這筆之後就開始建立樹、print出整棵樹等等 錯誤結果(Wrong Output):s 一直在等我輸入下一筆,除非我單獨輸入一個非數字字元他才會被強制停止迴圈。 程式碼(Code):(請善用置底文網頁, 記得排版) s 只有片段,scanf的部分 while(scanf("%d,", &num) != EOF) { statement; } 補充說明(Supplement):s ----- Sent from JPTT on my Asus ASUS_Z017DA. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.133.154 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1513179465.A.BC0.html

12/13 23:39, 8年前 , 1F
不好意思 因為用手機發文,沒注意到把一些控制文章段落
12/13 23:39, 1F

12/13 23:39, 8年前 , 2F
的代碼刪掉 所以有些字變亂碼QQ
12/13 23:39, 2F

12/14 01:21, 8年前 , 3F
ctrl+c,或者是另外寫個資料檔用"prog.exe < data.txt"
12/14 01:21, 3F

12/14 01:21, 8年前 , 4F
12/14 01:21, 4F

12/14 01:43, 8年前 , 5F
原因嘛…查查scanf、stdin、EOF應該就可以找到了
12/14 01:43, 5F

12/14 10:14, 8年前 , 6F
ctrl+c也太威 乾脆按關機鍵一勞永逸
12/14 10:14, 6F

12/14 11:25, 8年前 , 7F
哦..因為我的寫法是用EOF判斷,所以要按ctrl c ,不過題
12/14 11:25, 7F

12/14 11:25, 8年前 , 8F
目要求好像是要那串數字輸進去程式就自己跑了,請問有沒
12/14 11:25, 8F

12/14 11:25, 8年前 , 9F
有其他比較好的寫法呢,請各位指教orz
12/14 11:25, 9F

12/14 11:29, 8年前 , 10F
ctrl c咧 到底EOF是什麼知不知道阿
12/14 11:29, 10F

12/14 11:29, 8年前 , 11F
你是在參加比賽嗎 還是學校規定作業一定要這樣寫
12/14 11:29, 11F

12/14 11:31, 8年前 , 12F
都不是的話可以不用理這個要求 不是重點而且太麻煩
12/14 11:31, 12F

12/14 11:43, 8年前 , 13F
ctrl+c....這個跟signal有關
12/14 11:43, 13F

12/14 12:21, 8年前 , 14F
抱歉喔…ctrl+c會把你程式關掉
12/14 12:21, 14F

12/14 14:07, 8年前 , 15F
eof是Ctrl+z.....
12/14 14:07, 15F

12/14 14:19, 8年前 , 16F
好 感謝各位的指教 那我就先用這樣寫了 學校是沒有硬性
12/14 14:19, 16F

12/14 14:19, 8年前 , 17F
規定一定是只輸入一筆啦
12/14 14:19, 17F

12/14 14:23, 8年前 , 18F
你想知道的東西 查查scanf就有了...
12/14 14:23, 18F

12/14 18:08, 8年前 , 19F
eof不是ctrl-c啦,google一下嘛,不同的系統不一樣
12/14 18:08, 19F
文章代碼(AID): #1QCKb9l0 (C_and_CPP)