討論區快速選單
知識庫快速選單
掌握Salesforce雲端管理秘訣 網路投保旅行平安險 程式設計俱樂部Facebook粉絲團
[ 回上頁 ] [ 討論區發言規則 ]
使用sscanf取資料遇到問題
更改我的閱讀文章字型大小
作者 : wang3529(兔妹) 貼文超過200則人氣指數超過10000點
[ 貼文 307 | 人氣 27736 | 評價 50 | 評價/貼文 0.16 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/3/14 上午 11:10:53
char Buffer[128]="1.95";
我想分別取出整數(1)與小數(95)
我一開始用
char Int[64],Decimal[64];
sscanf(Buffer,"%s.%s",Int,Decimal);
結果是Int="1.95"
Decimal=空的
我改用
int Int,Decimal;
sscanf(Buffer,"%d.%d",&Int,&Decimal);
這樣取出來Int=1
Decimal=95
然後再轉成文字
想請問sscanf(Buffer,"%s.%s",Int,Decimal);用法是哪裡錯了呢?
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1034 | 人氣 3227 | 評價 1260 | 評價/貼文 1.22 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人wang3529註記此篇回應為很有道理 2018/3/14 下午 03:00:12
換個方式

#include <iostream>
#include <sstream>


using namespace std;

int main()
{
  stringstream Buffer("1.95");
  char Int[64], Decimal[64];
  
  Buffer.getline(Int, 64, '.');
  Buffer.getline(Decimal, 64);

  cout << "Int: " << int << endl
    << "Decimal: " << Decimal << endl;

  return 0;
}
作者 : ma_hty(白老鼠(Gary))討論區板主 OpenGL卓越專家DirectX優秀好手C++頂尖高手貼文超過2000則人氣指數超過70000點
[ 貼文 2170 | 人氣 89850 | 評價 10100 | 評價/貼文 4.65 | 送出評價 79 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人wang3529註記此篇回應為最佳解答 2018/3/14 下午 05:12:40

>char Buffer[128]='1.95';
>我想分別取出整數(1)與小數(95)
>我一開始用
>char Int[64],Decimal[64];
>sscanf(Buffer,'%s.%s',Int,Decimal);
>結果是Int='1.95'
>Decimal=空的
>我改用
>int Int,Decimal;
>sscanf(Buffer,'%d.%d',&Int,&Decimal);
>這樣取出來Int=1
>Decimal=95
>然後再轉成文字
>想請問sscanf(Buffer,'%s.%s',Int,Decimal);用法是哪裡錯了呢?


要這樣
  char aa[123], bb[123];
  sscanf( "1.95","%[^.].%[^.]", aa, bb );
  printf( "%s %s\n", aa, bb );

%s 的 delimiter 是 \n, 你的第一個%s, 就把整個字串收納了, 所以第二個字串就啥也沒有.
你可以用 %[^字元] 去讀字串, 把 delimiter 改成自訂字元的.
作者 : wang3529(兔妹) 貼文超過200則人氣指數超過10000點
[ 貼文 307 | 人氣 27736 | 評價 50 | 評價/貼文 0.16 | 送出評價 36 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/3/15 下午 03:34:46
原來需要用%[^.]這樣的符號
代表取到小數點就停止
很少看到這樣的用法
長知識了 感謝
作者 : cxxlman(CxxlMan) C++優秀好手貼文超過1000則
[ 貼文 1034 | 人氣 3227 | 評價 1260 | 評價/貼文 1.22 | 送出評價 27 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/3/15 下午 03:47:54

>原來需要用%[^.]這樣的符號
>代表取到小數點就停止
>很少看到這樣的用法
>長知識了 感謝

這是正則表達式,應該是 c++11 之後加入的
作者 : ice_emissary(燃燒的大地) 貼文超過200則
[ 貼文 386 | 人氣 0 | 評價 1770 | 評價/貼文 4.59 | 送出評價 17 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/3/15 下午 04:25:08
>>原來需要用%[^.]這樣的符號
>>代表取到小數點就停止
>>很少看到這樣的用法
>>長知識了 感謝
>
>這是正則表達式,應該是 c++11 之後加入的

我記得這個用法在 C89 甚至更早的年代就已經在標準裡了喔!
http://www.cplusplus.com/reference/cstdio/scanf/

另外,請不要把 C 和 C++ 搞混了!
沒記錯的話,C 標準一直到現在都還沒有加入正則表達相關的解析庫。
作者 : sflam(Raymond)討論區板主 Visual C++ .NET卓越專家VC++一代宗師新手入門優秀好手資訊類作業求救頂尖高手C++一代宗師貼文超過4000則
[ 貼文 4945 | 人氣 9172 | 評價 32290 | 評價/貼文 6.53 | 送出評價 142 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/3/15 下午 07:53:13
>>原來需要用%[^.]這樣的符號
>>代表取到小數點就停止
>>很少看到這樣的用法
>>長知識了 感謝
>
>這是正則表達式,應該是 c++11 之後加入的

scanf() 並不支援 regular expression, 這是 scanf() 的 format specification, 借用了 regular expression 裡一些符號的用法.

scanf() 跟它的 format specification 都是 C 語言標準函式庫的東西, 跟 C++ 沒有關係. 如果我沒記錯的話, 在 C89/C90 就已經有了.

作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4473 | 人氣 37262 | 評價 10900 | 評價/貼文 2.44 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2018/3/16 下午 05:20:15
http://mirror.fsf.org/pmon2000/2.x/src/lib/libc/scanf.c
 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 13050 
2 青衫 4760 
3 simula 4690 
4 coco 4030 
5 白老鼠(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.15625