[問題] 可以用sscnaf來分token嗎 ??
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC6
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
爬文及參考 http://blog.xuite.net/tsai.oktomy/program/12104094 的說明後,
發現在 C 中可以用 fscanf(file_in, "%[^\n] ", cLineData) 讀一整行,
其中 %[^\n] 代表只讀 \n 以外的符號,
那可不可以用 sscanf 配合 %[] 的語法來完成分 token 的工作,
而不用 strtok 呢?
餵入的資料(Input):
格式如下:
1 aa bb cc dd
2 aa bb cc dd
3 aa bb cc dd
4 aa bb cc dd
預期的正確結果(Expected Output):
1 1 aa bb cc dd
1
aa
bb
cc
dd
2 aa bb cc dd
(以下恕刪)
錯誤結果(Wrong Output):
1 1 aa bb cc dd
1
1
1
(無法離開迴圈)
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char cLineData[2000], cTmp[50];
FILE *file_in;
file_in = fopen(argv[1], "r");
while(fscanf(file_in, "%[^\n] ", cLineData)>0)
{
fprintf(stderr, "%s\n", cLineData);
while(sscanf(cLineData, "%[^\t ,;]", cTmp)>0)
fprintf(stderr, "%s\n", cTmp);
}
fclose(file_in);
return 0;
}
補充說明(Supplement):
為何 fscanf(file_in, "%[^\n] ", cLineData) 中,]後的那個空白一定要加呢?
加不加有何影響呢?
感謝各位
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 112.104.86.82
自問自答,但我是亂猜,不太清楚為何這樣能動,也不知程式碼能不能再精簡
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int dTmp, nLen;
char cLineData[2000], cTmp[50];
FILE *file_in;
file_in = fopen(argv[1], "r");
while(fscanf(file_in, "%[^\n] ", cLineData)>0)
{
fprintf(stderr, "%s\n", cLineData);
nLen = 0;
while(sscanf(cLineData+nLen, "%[\t ,;]", cTmp)>0)
nLen += strlen(cTmp);
while(sscanf(cLineData+nLen, "%[^\t ,;]", cTmp)>0)
{
fprintf(stderr, "%s\n", cTmp);
nLen += strlen(cTmp);
while(sscanf(cLineData+nLen, "%[\t ,;]", cTmp)>0)
nLen += strlen(cTmp);
}
}
fclose(file_in);
return 0;
}
老實說我目前對 scanf 系列的指令中,
"%[]" 要不要在 ] 後加個空白符號很不清楚,
煩請先進指導一下
※ 編輯: addbear22 來自: 112.104.86.82 (01/29 16:26)
※ 編輯: addbear22 來自: 112.104.86.82 (01/29 16:37)
推
01/29 18:17, , 1F
01/29 18:17, 1F
→
01/29 18:17, , 2F
01/29 18:17, 2F
→
01/29 18:19, , 3F
01/29 18:19, 3F
→
01/29 18:21, , 4F
01/29 18:21, 4F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章