2013-04-08 30 views
0

我試圖完全讀取文件的第一行,直到\n並將其存儲在一個變量中。然後我嘗試讀取文件的第二行,但沒有給出正確的輸出。我不確定發生了什麼事。它讀取空白,或者可能是在fscanf()之後移動的文件指針?當我用fscanf讀第二行時,爲什麼會得到空字符?

的abc.txt文件包含:

>hello test file<br> 
1 

但輸出(我在printf中得到)是:

status: 
>pwd :hello test file 

那麼,爲什麼狀態在這裏失蹤?

這裏是我的程序:

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char status,pwd[30]; 
    FILE *fp; 
    fp=fopen("abc.txt","r"); 
    if(fp == NULL) 
    { 
     printf("Cannot open file "); 
     fclose(fp); 
     return 0; 
    } 

    fscanf(fp,"%29[^\n]",pwd); 
    fscanf(fp,"%c",&status); 

    fclose(fp); 
    printf("\n Status : %c pwd: %s",status,pwd); 
} 
+0

put'fgetc(fp);'介於最後兩個fscanf()之間,希望能夠解決您的問題 – cakil 2013-04-08 18:35:57

回答

3

這裏:

fscanf(fp,"%29[^\n]",pwd); 

你告訴fscanf()閱讀,直到它看到一個換行符,然後停止。在這裏:

fscanf(fp,"%c",&status); 

你告訴fscanf()讀取下一個字符(這是新行)。那麼在這裏:

printf("\n Status : %c pwd: %s",status,pwd); 

它打印換行的字符(所以你不能看到它,它只是一個空行)

你需要消耗是換行,如果你想這樣讀它與fscanf()。

一種選擇是隻是像做:

fscanf(fp,"%29[^\n]",pwd); 
fgetc(fp); 
fscanf(fp,"%c",&status); 

另一項決議將是%c前添加一個空格告訴fscanf()忽略空白字符:

fscanf(fp,"%29[^\n]",pwd); 
fscanf(fp," %c",&status); 
1

第一fscanf正在換行,所以第二個fscanf只是讀新行,而不是你想要的字符。您可以通過在%c之前放置空格來解決此問題,例如

fscanf(fp," %c",&status); 
相關問題