2013-02-02 42 views
0

我有這個程序的類,我們只需要證明我們可以從文本和二進制文件讀取,寫入和填充數組。我沒有用二進制文件發佈很多,但文本文件正在給大腦時間帶來痛苦。使用fgets從文本文件填充數組

我相信這個小小的代碼是責怪。 userInputText [MAXSIZE]是一個char數組(MAXSIZE定義爲100000),當程序處於此時,textCount和textCounter都被初始化爲零。

textPointer = fopen("textFile.txt", "r"); 
if (textPointer) 
{ 
    while (fgets(userInputText, sizeof(userInputText), textPointer) != NULL) 
    { 
     sscanf(userInputText, "%d", &textCount); 
     userInputText[textCounter] = textCount; 
     textCounter += 1; 
    } 
} 

當用戶第一次運行程序時,程序的這一部分被跳過,用戶被要求創建並寫入文本文件。用戶輸入整數並將它們寫入文本文件並存儲在userInputText中,並顯示在程序結尾的屏幕上。所有這些工作都很好,每次運行程序時都會正確地附加文本文件。我已經嘗試過在上面的代碼中可以想到的每個組合。我嘗試過使用fopen(r +),sizeof(int和MAXSIZE),試驗%d。在我的fprintf部分後面的程序中,我將「\ n」設置爲分隔符,但我也嘗試刪除它。我把fgets換成了fread。我已經到了一個類似於狒狒拋出問題的地步。

我不希望人們認爲我很懶惰,尋找一個簡單的答案,弱智可能但不懶惰。

有什麼建議嗎?

感謝,

邁克

+0

運行該程序時實際發生了什麼? – Hassan

+1

你究竟在做什麼*做*?這段代碼嘗試從FILE *流的格式化文本輸入中讀取一個整數,然後出於某種奇怪的原因,您更新了用於行處理的*相同的文本緩衝區* ,但現在用'int'轉換結果。如果這是你的意圖(我看不出它是怎麼回事),那就這樣吧,但是你會意識到你正在吹走你剛讀完的每一行新書時保存的價值,對吧? – WhozCraig

+0

當我第一次運行程序時。它要求用戶輸入數字。我在while循環中執行scanf(%d),直到用戶輸入-999。當用戶處於循環中時,數字被存儲到userInputText []中,並且計數器遞增以獲得下標。然後我使用fprintf(textPointer,「%d \ n」,textTemp);將文件寫入文本文件。數組和文本文件都很好,直到這一點。它的下一個程序運行的地方有問題,因爲在允許用戶輸入更多數字之前,我必須根據文本文件填充數組。 –

回答

0

嘗試while(!feof(textPointer)) { fgets(userInputText,MAXSIZE,textPointer); }

sizeof(userInputText)只會返回一個字符指針的大小。

+0

如果'userInputText'被聲明爲一個固定數組,那麼這是不正確的,OP在該問題中明確指出*是*。 – WhozCraig

+0

我希望我能在這裏充分地回答每個人。我的指令是創建一個整數數組,將ip存儲爲5,000個數字,並允許用戶將數字輸入到數組中並將數字保存到文件中。當用戶第二次運行代碼時,我需要根據保存到文件中的數字來填充數組。在程序的後面,用戶應該能夠輸入更多的數字,這些數字將會在已經填充的數組離開的地方接管。 –

+0

代碼需要從文本文件和二進制文件中讀寫。我爲我的二進制文件做了一些相同的代碼(fread,fwrite等),它工作得很好。我最初發布的代碼應該(在第一次運行後)獲取文件並填充數組。如果文件中有20個數字。 10,20,30etc ..我應該去用程序的輸入部分與userInputText [20] = textCount和開始添加到數組。我會張貼整個節目,但它有點冗長。 –