[問題] fscanf的用法

看板C_and_CPP作者 (被陰了的我)時間15年前 (2010/07/17 17:09), 編輯推噓7(703)
留言10則, 5人參與, 最新討論串1/1
*[1;36m開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)*[m VS C++ *[1;36m有問題的code: (請善用置底文標色功能)*[m #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <iostream> struct FileIn { int nF; float fG; int nH; int nI; char cJ[10]; float fK; float fL; float fM; int nN; float fZ; }csvfile; int main() { FILE *fp1 = fopen( "grp_21.csv" , "r" ); if( fp1 == NULL ) { printf( "開檔錯誤" ); exit(1); } fscanf( fp1 , "%d,%f,%d,%d,%s,%f,%f,%f,%d,%f\n" , &csvfile.nF , &csvfile.fG , &csvfile.nH , &csvfile.nI , &csvfile.cJ , &csvfile.fK , &csvfile.fL , &csvfile.fM , &csvfile.nN , &csvfile.fZ , ); printf( "%s" , csvfile.cJ ); fclose(fp1); system( "pause" ); } 遇到的問題: (題意請描述清楚) 我用fscanf讀取檔案資料 一筆資料中有整數,小數點,中文 檔案中分別用逗號隔開 當我讀到中文字的時候 我設定的是%s 而跑到這項的時候 後面的資料全部都寫入cJ之中 %s之前的資料分別讀都是正確的 %s後面的資料都是空的 希望得到的正確結果: 讓%s只單獨存字元就好 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.138.178.67

07/17 19:16, , 1F
%s改成%[^,]
07/17 19:16, 1F

07/17 19:35, , 2F
成功了~ 大大可以解釋一下[^,]這個的意思嗎
07/17 19:35, 2F

07/17 19:39, , 3F
研究了一下好像是規定字串結尾是逗號 那^的意思是無視嗎
07/17 19:39, 3F

07/17 19:44, , 4F
^是not的意思,[^,]代表存取逗號外的所有字元
07/17 19:44, 4F

07/17 19:48, , 5F
regular expression
07/17 19:48, 5F

07/17 20:13, , 6F
可以搭配fread、fwrite, 把整個結構變數都用二進位方
07/17 20:13, 6F

07/17 20:14, , 7F
式存放在檔案中, 這樣也可以支援隨機存取
07/17 20:14, 7F

07/17 20:15, , 8F
07/17 20:15, 8F

07/17 20:29, , 9F
恩恩~了解 謝謝各位大大
07/17 20:29, 9F

07/18 21:19, , 10F
好強..沒看過這種用法
07/18 21:19, 10F
文章代碼(AID): #1CGNDK93 (C_and_CPP)