2011-12-24 40 views
2

我可能錯過了一些顯而易見的東西,但是每次我寫入文件時,輸入的文本都在打開文檔的第二行時顯示。這是什麼造成的?當我寫入文件時 n來自哪裏?

#include <stdio.h> 

int main() 
{ 
    char c; 
    char filename[100]; 
    FILE *fp; 

    printf("Type the name of the file to write to followed by enter: \n\n"); 

    scanf("%[^\t\n]s", filename); 

    fp = fopen(filename, "w"); 

    printf("\n\nEnter the text you wish to write to this file: \n\n"); 

    while ((c = getchar()) != EOF) 
    { 
     putc(c, fp); 
    } 

    return 0; 
} 

回答

4

你告訴scanf不要吃任何\n字符,所以仍然會有一個坐在輸入緩衝區,當你開始用putcgetchar循環。

一個解決方案是用一個呼叫環路先於putcgetchar\n

+0

這將是在putc將調用的參數刪除\ n ? – bqui56 2011-12-24 19:53:12

+0

@ stariz77:對不起,這是一個錯字。我的意思是'getchar'。 – 2011-12-24 19:55:14

0

因爲scanf沒有使用'\n'(或'\t')。

嘗試用標籤指定文件名:"filename<TAB>first line<ENTER>" :)


爲了擺脫ENTER,使用

while ((ch = getchar()) != '\n' && ch != EOF) /* void */; 
if (ch == EOF) /* no more input; abort or whatever */;