Re: [問題] sprintf和fscanf無法共用?

看板C_and_CPP作者 (丹丹)時間15年前 (2010/06/12 19:52), 編輯推噓3(3010)
留言13則, 4人參與, 最新討論串2/2 (看更多)
我剛才用你推文裡補充的 code 跑了一下,是可以的 @@ // 因為我不是用 Windows,所以只改了路徑 然後不要再說推文裡那個 code 其實是打錯的 XDD 執行結果: 1.000000 2.000000 3.000000 4.000000 5.000000 5.000000 6.000000 7.000000 8.000000 9.000000 10.000000 unload 1.csv 內容: 1 2 3 4 5 2.csv 內容: 5 6 7 8 9 10 fop.c 內容: #include <stdio.h> int main() { FILE* fp; int i,j; double x; char * s=(char *)calloc(100,sizeof(char)); for(j=1;j<5;j++) for(i=1;i<5;i++) { sprintf(s,"/tmp/%d.csv",i); fp = fopen(s,"r"); if(!fp){ printf("unload"); return 0;} while(fscanf(fp,"%lf%*c",&x)!=EOF) { printf("%f ",x); } } free(s); return 0; } ※ 引述《nosmraw (阿滴)》之銘言: : 遇到的問題: (題意請描述清楚) : 我想要連續讀csv檔來做處理 : 每個檔名差別在數字 : 所以我用sprintf來組合字串 : 再將檔案做fscanf處理 : 我的問題是 : 當我直接讀檔的話,fscanf有效用 : ex:(省略宣告) : fp=fopen("1_1.csv","r"); : while(fscanf(fp,"%lf%*c",&x1)!=EOF) : printf("%f",x); : 若是改成連續讀檔的話,fscanf會失效 : ex:(省略宣告) : for(i=1;i<=10;i++) : for(j=1;j<=5;j++) : { : sprintf(fp_srt,"%d_%d.csv",i,j); : fp = fopen(fp_srt,"r"); : while(fscanf(fp,"%lf%*c",&x)!=EOF) : printf("%f ",x); : } : 此時while進入不了 : 想請問各位大大是否知道為什麼 : 還有如何解決這個問題~"~ : 希望得到的正確結果: : 若csv內容為 1,2,3,4,.... : 則印出 : 1 2 3 4 5........ : 程式跑出來的錯誤結果: : (no value) : 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) : vc2008 : 有問題的code: (請善用置底文標色功能) : 放在上面了 : : 補充說明: : 若我不使用sprintf的話 : 是可以印出的 : 所以我懷疑是sprintf的問題 : ex: : for(i=1;i<=10;i++) : for(j=1;j<=5;j++) : { : fp = fopen("1_1.csv","r"); : while(fscanf(fp,"%lf%*c",&x)!=EOF) : printf("%f",x); : fclose(fp); : } : 先感謝了>"< -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.227.84.52

06/12 20:46, , 1F
我比較好奇的是 csv 幾時接受空格當分隔字元了。
06/12 20:46, 1F

06/12 20:46, , 2F
不是 comma-separated values 嗎?
06/12 20:46, 2F

06/12 21:38, , 3F
大大能否試試sprintf使用兩個參數 看看是否能夠執行@@?
06/12 21:38, 3F

06/12 21:38, , 4F
有點懷疑是編譯器的問題了~"~
06/12 21:38, 4F

06/12 21:39, , 5F
現在是偶爾可以偶爾不行....很詭異- -"
06/12 21:39, 5F

06/12 23:21, , 6F
我將檔名改成 1_1.csv 與 1_2.csv 是可以 work 的
06/12 23:21, 6F

06/12 23:21, , 7F
既然你用的是 VC,VC 的 compiler 不會錯這麼腦殘的地方
06/12 23:21, 7F

06/12 23:41, , 8F
我也覺得這地方很鳥..剛亂七八糟的亂弄 突然就過了- -"
06/12 23:41, 8F

06/12 23:42, , 9F
總之不想再亂動啥咪了 莫名其妙卡好久 感謝幫忙測試阿>"<
06/12 23:42, 9F

06/13 00:43, , 10F
要不要考慮每次開檔完後關閉檔案啊...有上限的
06/13 00:43, 10F

06/13 00:44, , 11F
另外是s buf需要bzero一下 如果有個檔案編號較長就會出現
06/13 00:44, 11F

06/13 00:46, , 12F
...啊 不用bzero, sprintf應該會補0
06/13 00:46, 12F

06/13 01:22, , 13F
瞭解~感謝阿~^^
06/13 01:22, 13F
文章代碼(AID): #1C4tJ-Us (C_and_CPP)
文章代碼(AID): #1C4tJ-Us (C_and_CPP)