2013-02-21 165 views
0

我剛剛開始使用FILE I/O,我很困惑。下面的代碼中的while循環給出了一個奇怪的輸出。它打印ii = 1開始,然後a[1] = ..但在while循環之外,我已指定i = 0。進入while循環後爲什麼i遞增爲1的任何理由?令人困惑的是,最後的循環,正確地打印a[0] = 0文件輸入/輸出混淆

#include <stdio.h> 
#include <stdlib.h> 
#define N 11 

int main() 
{ 
    FILE *fp; 
    int i, a[N]; 
    fp = fopen("numbers.txt", "w"); 
    for(i = 0; i < N; i++) 
    fprintf(fp,"%d\n",i); 
    fclose(fp); 
    fp = fopen("numbers.txt", "r"); 
    i = 0; 
    while(!feof(fp)) 
    { 
     printf("i = %d ",i); 
     fscanf(fp,"%d",&a[i]); 
     printf("a[%d] = %d\n",i,a[i]); 
     i++; 
    } 
    for(i = 0; i < N; i++) 
    printf("%d\n",a[i]); 
    return 0; 
} 

編輯:得到了上面的問題,現在澄清,另一種混亂。在讀取文件中的最後一個數字之後,feof(fp)不應該返回一個非零值,從而終止while循環嗎?爲什麼它會多執行一次循環?

+2

[對我來說,實際上並沒有](http://dl.dropbox.com/u/4960980/Screen%20Shot%202013-02-21%20at%206.22.56%20PM.png)。數字從0開始。 – 2013-02-21 17:21:31

+0

我在ubuntu 12.10上使用codeblocks(是的,我正在使用GCC)它從0開始,直到N = 9,但在那之後它給了我這個問題! – Nishad 2013-02-21 17:24:00

+0

你能顯示輸出嗎?打印屏幕或複製粘貼它。 – fatrock92 2013-02-21 17:24:02

回答

1

您的終端切斷輸出的第一行,因爲它太長。

+0

噢好吧,但即使擴大終端尺寸,我也無法打印! – Nishad 2013-02-21 17:35:13

+0

@Nishad這是您的終端供應商的錯。如果將程序的輸出重定向到文件中,然後使用Gedit打開該文件,會怎麼樣? – 2013-02-21 17:35:59

+0

@Nishad在終端中向上滾動,不要在事後調整它的大小。或者,打開一個普通的終端並直接從那裏運行程序。 – 2013-02-21 17:37:13