作者Dannvix (丹丹)
看板C_and_CPP
標題Re: [問題] sprintf和fscanf無法共用?
時間Sat Jun 12 19:52:28 2010
我剛才用你推文裡補充的 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
→ tinlans:我比較好奇的是 csv 幾時接受空格當分隔字元了。 06/12 20:46
→ tinlans:不是 comma-separated values 嗎? 06/12 20:46
推 nosmraw:大大能否試試sprintf使用兩個參數 看看是否能夠執行@@? 06/12 21:38
→ nosmraw:有點懷疑是編譯器的問題了~"~ 06/12 21:38
→ nosmraw:現在是偶爾可以偶爾不行....很詭異- -" 06/12 21:39
→ Dannvix:我將檔名改成 1_1.csv 與 1_2.csv 是可以 work 的 06/12 23:21
→ Dannvix:既然你用的是 VC,VC 的 compiler 不會錯這麼腦殘的地方 06/12 23:21
推 nosmraw:我也覺得這地方很鳥..剛亂七八糟的亂弄 突然就過了- -" 06/12 23:41
→ nosmraw:總之不想再亂動啥咪了 莫名其妙卡好久 感謝幫忙測試阿>"< 06/12 23:42
→ sunneo:要不要考慮每次開檔完後關閉檔案啊...有上限的 06/13 00:43
→ sunneo:另外是s buf需要bzero一下 如果有個檔案編號較長就會出現 06/13 00:44
→ sunneo:...啊 不用bzero, sprintf應該會補0 06/13 00:46
推 nosmraw:瞭解~感謝阿~^^ 06/13 01:22