[問題] feof()函式的問題

看板C_and_CPP作者 (月光男孩)時間11年前 (2012/11/30 16:57), 編輯推噓1(1011)
留言12則, 4人參與, 最新討論串1/1
各位大大我想請教一下C裡面的feof()函式的用法 網路上看了一些文章但還是不太清楚 我先附上我的程式碼,目前我要的功能是把文字檔裡面的資料讀近來然後存到二維陣列 裡面 int main(int argc, char *argv[]) { char year[25][6],enrollments[25][7]; float NYear[25],NEnrollments[25]; FILE *fp; fp = fopen("en_data.txt","r"); if (fp == NULL){ printf("Error opening file\n"); system("PAUSE"); exit(1); } while (!feof(fp)) { fscanf(fp,"%s %s",year,enrollments); printf("%s %s\n",year,enrollments); } return 0; } 在while判別式那邊,有人說這樣的寫法不好(網路某篇文章) 他修改後是用while(fgets(...)) 我不懂為什麼? 另外問一個很白癡的問題@@ 我的陣列型態是char 為什麼fscanf裡面如果用%c會出現亂碼呢? %s不是string再用的嗎? 謝謝 --

05/21 12:47,
火頓 毫火球之數
05/21 12:47

05/21 13:06,
牛頓‧微積分工術!
05/21 13:06
-- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.33.178

11/30 19:02, , 1F
字串可以存在字元陣列裡面,並且結尾會有一個 '\0'。
11/30 19:02, 1F

11/30 19:04, , 2F
如果結尾沒有 '\0',printf 會不知道字串的結尾在哪。
11/30 19:04, 2F

11/30 19:05, , 3F

12/01 22:57, , 4F
感謝!
12/01 22:57, 4F

12/01 23:29, , 5F
小心這種NULL-terminated的東西, 不注意有一天會被這個
12/01 23:29, 5F

12/01 23:30, , 6F
搞到bug怎麼會出現都想不透,特別是MS VC++在 debug 與
12/01 23:30, 6F

12/01 23:31, , 7F
release 生出的code與Run-time Library行為不太一樣, 就
12/01 23:31, 7F

12/01 23:32, , 8F
會出現相同code在 debug 版本沒有問題,但是在 release
12/01 23:32, 8F

12/01 23:34, , 9F
版本卻莫名地會掛掉或有其他奇怪的問題的現象出現.
12/01 23:34, 9F

12/01 23:36, , 10F
有時候就是沒有去注意 ANSI C 的字串需要結尾有 '\0' 而
12/01 23:36, 10F

12/01 23:37, , 11F
已, 卻連帶有其他副作用產生你找不到的 bugs !
12/01 23:37, 11F

12/03 23:15, , 12F
讀檔的程式下一行最好直接加if(feof)break;
12/03 23:15, 12F
文章代碼(AID): #1Gk7KHUO (C_and_CPP)