2015-10-17 31 views
-1

程序以讀取模式打開文件。然後創建第二個文件,將第一個文件的內容寫入第二個文件並刪除第一個文件。它通過將第二個文件重命名爲原始名稱結束。將一個文件寫入另一個文件會產生不正確的結果

這是我得到的輸出。

User:~ ./main 

Before 
M1 
M2 
M3 
M4 

After 
1 
M2 
M4 
ÿ User:~ 

輸出應該讀取與第一行相同的內容,因爲那是我想要刪除的行。

這是複製字符的代碼的一部分。

ch = getc(File1); 
while(ch != EOF); 
{ 
    ch = getc(File1); 

    if (ch == '\n') 
     ln++; 
    if (ln != LineToDelete) 
    { 
     putc(ch, File2); 
    } 
} 

Here is The Full Code On Pastebin

+0

你應該在這裏發佈所有相關的代碼,因爲引擎收錄鏈接可能會死,與本網站的觀點是對人同樣的問題能夠得到以後幫助。 – Almo

+0

這完全是從你真實的代碼複製粘貼? – immibis

回答

0

有三個問題,我看到:

  1. 你扔掉你的第一個輸入的字符,因爲你進入你的循環之前讀一個字符,然後進入後立即讀取另一。
  2. 您尚未初始化ln。看起來你很幸運,它已經是0,所以你最終忽略了「M3」而不是「M2」的命令。然而,你正在處理未定義的行爲。任何事情都可能發生。
  3. 您正在打印出EOF字符。

嘗試這樣:

ln = 1; 
while (EOF != (ch = getc(File1))) { 
    if ('\n' == ch) 
     ++ln; 
    if (LineToDelete != ln) 
     putc(ch, File2); 
} 
+0

1之前的第一個字符'M'仍然丟失。然而EOF字符消失了。謝謝。 –

+0

沒關係,這個工程。再次感謝。 –

相關問題