2015-05-08 57 views
0

我寫了這段代碼,它似乎有一個函數fseek()的問題。因爲它會影響文本文件的閱讀。它使函數fscanf()從文件和錯誤的數據中讀取類似垃圾的東西。我的文件只包含浮點數。找不到功能錯誤fseek()

FILE *fptr; 
if (!(fptr = fopen("saving.txt", "r"))){ 
    printf("File could not be opened to retrieve your data from it.\n"); 
} 
else { 
    fseek(fptr, 0, SEEK_END); 
    unsigned long len = (unsigned long)ftell(fptr); 
    if (len > 0) { //check if the file is not empty. 
     while (!feof(fptr)){ 
      fscanf(fptr,"%f\n", &p.burst_time); 
      //printf("time = %f\n",p.burst_time); 
      AddProcess(&l,p.burst_time); 
     } 
    } 
    fclose(fptr); 
} 

提示:這部分代碼知道文件是否爲空。如果沒有讀取它。我也使用函數倒帶(fptr);之前的循環,但沒有區別。提前感謝。

+1

可能的重複[爲什麼是「while(!feof(file))」總是出錯?](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong) – Barmar

+1

您需要測試'fscanf()'的返回值以查看它是否讀取任何內容。 – Barmar

+2

爲什麼你希望能夠讀取任何東西,如果你第一次尋求文件的結尾?這裏什麼都沒有! – Barmar

回答

0

看着只是你的代碼的摘錄:

fseek(fptr, 0, SEEK_END); 
unsigned long len = (unsigned long)ftell(fptr); 
if (len > 0) { //check if the file is not empty. 
    while (!feof(fptr)){ 
     fscanf(fptr,"%f\n", &p.burst_time); 

尋求你的文件的末尾,你做之前的任何讀取某些原因。我假設你正在這樣做來確定文件的大小。

您瘋狂輸出的原因是您沒有實際讀取任何內容,所以feof直到第一次通過時纔會返回文件結尾。

我建議你通過在while聲明前加上fseek(fptr, 0, SEEK_SET);來解決此問題。