為什麼這篇fscanf數字鄉民發文收入到精華區:因為在fscanf數字這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者j16598231 (滎鶄)看板C_and_CPP標題[問題] 讀檔做數字運算(C++)時間Mo...
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
用動態記憶體產生二維陣列,把數字讀進去並運算。
檔案類似:
1123.4566,375.11,18555.3
121.32,555.55,111
但是現在遇到逗號都會變成亂碼..
希望得到的正確結果:
我希望能變成ptr[0][0]=1123.4566 , ptr[0][1]=375.11 。
程式跑出來的錯誤結果:
第一個陣列可以正常讀。 ptr[0][0]=1123.4566,但是遇到逗號','之後就亂碼了..
雖然把逗號全部換成空白會對,但是資料檔裡面規定用逗號分隔..
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
DEV C++
有問題的code: (請善用置底文標色功能)
double *ptr;
ptr=new double[30];
cout.precision(9);
ifstream fin;
fin.open("Hw02_01.txt");
if(!fin)
cout<<"讀取檔案失敗。";
//char ch;
for (int i = 0; i < 7; i++) {
for (int k = 0; k < 4; k++) {
//fin.get(ch);
// *(ptr+i*4+k)=ch;
//cin.getline(fin,15);
fin>>*(ptr+i*4+k);
// if(fin==',');
}
}
for (int i = 0; i < 7; i++) {
for (int k = 0; k < 4; k++) {
cout<<*(ptr+i*4+k);
}}
cout<<*(ptr+0)<<endl<<*(ptr+1);
補充說明:
有些註解的地方是我爬文或是換個方式寫的,但那反而錯更多...
我也有找到fscanf()但那好像是C語言的語法,沒教過。
如果可以,我希望能使用C++解題。
另外我發現了個問題,如果我程式沒寫cout.precision(9),程式好像只會讀到6個數字。
請問,這是為什麼?(當初為了這個也卡好久)
兩個問題,煩請各位!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.171.85.198
我只是想說fscanf()沒教過,教的是檔案>>變數(用串流符號)與cout。
可能有哪邊文意表達不清楚,抱歉!
while(fin==','); 這樣好像也怪怪的。
麻煩各位,感恩。
※ 編輯: j16598231 來自: 118.171.85.198 (10/11 19:58)
平常寫程式我有問題都是去C++學習筆記網站看,因為那裏沒寫到
fscanf()語法,我就自己認定fscanf()是C語言的寫法,有這種以
管窺天的想法真的很抱歉!也感謝上面各位不計較的回答我。
至於使用動態記憶體做是作業規定的...
目前正在嘗試以fscanf()語法寫,但碰到了些問題。
開檔的方式好像要改掉?
double *ptr;
ptr=new double[30];
cout.precision(9);
FILE *file;
file = fopen ("Hw02_01.txt","r");
if(!file)
cout<<"error";
for (int i = 0; i < 7; i++) {
for (int k = 0; k < 4; k++) {
fscanf(file,"%f",&ptr);
}
}
編譯可以過,但是一執行就錯誤了。
不知是否可以再請各位高手幫我看看..
※ 編輯: j16598231 來自: 118.171.85.198 (10/12 00:47)
if(!file)
cout<<"error";
並沒顯示錯誤訊息,所以檔案應該是有開成功。
double ptr[7][4];
cout.precision(10);
ifstream fin;
fin.open("Hw02_01.txt");
for(int i=0;i<7;i++) {
for(int k=0;k<4;k++){
ptr[i][k]=0;
}
}
for(int i=0;i<7;i++) {
for(int k=0;k<4;k++)
fin>>ptr[i][k];
}
for(int i=0;i<7;i++) {
for(int k=0;k<4;k++){
cout<<ptr[i][k]<<"\t";
}
}
※ 編輯: j16598231 來自: 118.171.85.198 (10/12 02:15)
※ 編輯: j16598231 來自: 118.171.85.198 (10/12 02:19)
動態二維陣列我是參考C++教學筆記網的方式,計算索引值位移量。
*(ptr + n*i + j) ←i當列,j當行。 ptr[i][j]
==============================================================
其實我現在最大的問題是在於怎麼利用fscanf語法或是其他語法,使得
遇到逗號時就跳過不取。
感謝您那麼晚還耐心地回答。 ^_^
※ 編輯: j16598231 來自: 118.171.85.198 (10/12 02:52)