看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 練習一個簡單的讀入檔案程式,使用環境是 Visual studio 2008 ****************code****************** //此程式為開啟一個在c:\\prog\welcome.txt檔案,讀入字元並計算字元數 #include<stdio.h> #include<stdlib.h> int main() { FILE *f; int count = 0; char ch; f = fopen("c:\\prog\\welcome.txt","r"); if(f != NULL) { while(ch = getc(f) != EOF) { printf("%c",ch); count++; } printf("\n總共有%d個字元\n",count); fclose(f); } else printf("檔案開啟失敗"); system("pause"); return 0; } 希望得到的正確結果: 檔案內容為 hello kitty 應得到螢幕印出 hello kitty 總共有11個字元 程式跑出來的錯誤結果: :) ← 就是那種word會出現的圓形的小笑臉 11個 ...... 總共有11個字元 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC++ 有問題的code: (請善用置底文標色功能) 編譯都過,除了有警告fopen要改成fopen_s以外 不過改了以後反而就編譯不過了(?) 補充說明: none 感謝好心人解答~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.75.177
CCWck:while那一行的括號內 邏輯判斷有問題 08/17 14:15
CCWck:(ch==getc(f)) &&(getc(f)!=EOF) 試試看 08/17 14:15
Dannvix:while ((ch = getc(f)) != EOF) 08/17 14:17
Dannvix:原本的寫法會解譯成(ch = (getc(f) != EOF))出來都 0x01 08/17 14:18
Dannvix:二樓的寫法讀出來會少字 08/17 14:19
shesee:對,上面會少字,不過可以成功的讓笑臉變回英文字元 hlokt 08/17 14:20
shesee:可能是因為ch變數沒有初始值,不能邏輯判斷 == getc(f) 08/17 14:21
shesee:D大的結果則是與我一開始的code一樣 08/17 14:22
Dannvix:你說三樓的code跟你一開始的結果一樣? @_@ 08/17 14:23
shesee:對啊,還是11個笑臉 笑得我心底發寒 orz 08/17 14:23
Dannvix:可以貼一下你改完之後的code嗎 0.0 08/17 14:27
就是直接改成您的建議,只有加一對括號,應該不需要貼code。 = 是雙元運算子,就是左右都要有運算元,功能是把 右邊的運算元 存進 左邊, 我自己的猜想,應該加不加括號都對這個錯誤沒有什麼差別... 不過我是新手剛學,真的是不了解,如果上述猜想有錯也請各位大德指正觀念, 感謝! ※ 編輯: shesee 來自: 140.116.75.177 (08/17 14:34)
loveme00835:3樓是對的阿, 怎麼會跑不出來 = = 08/17 14:41
loveme00835:你沒把改過的貼上來, 別人也不知道你有沒有改錯 08/17 14:42
Dannvix:加不加括號當然有差,差在「右邊的operand」是取什麼東西 08/17 14:47
Dannvix:BTW, 如果你照三樓的方式改還不能跑的話,我也束手無策 :( 08/17 14:47
#include<stdio.h> #include<stdlib.h> int main() { FILE *f; int count = 0; char ch; f = fopen("c:\\prog\\welcome.txt","r"); if(f != NULL) { while((ch=getc(f))!=EOF) { printf("%c",ch); count++; } printf("\n總共有%d個字元\n",count); fclose(f); } else printf("檔案開啟失敗!"); system("pause"); return 0; } ※ 編輯: shesee 來自: 140.116.75.177 (08/17 14:56) ※ 編輯: shesee 來自: 140.116.75.177 (08/17 14:58)
Dannvix:@_____@ 只好徵求其它強者來把脈了 08/17 15:08
shesee:感謝樓上熱情解答XD 08/17 15:10
loveme00835:while( fscanf( f, "%c",&ch) != EOF ) 呢? 08/17 15:17
bleed1979:用fgetc會如何? 08/17 17:58
VictorTom:同樣的code與測資, 我拿VC2005跑了是OK的說@_@" 08/17 23:09
VictorTom:說的是後面修改過的新版:) 08/17 23:09
shesee:OK了,換一個VC就OK...XD 08/18 11:42