簡體   English   中英

fscanf()讀取錯誤

[英]fscanf () read error

我有一個文本文件,我將其名字和姓氏讀入大小為20的字符數組中。我正在創建一個結構數組,其中包含“人的”信息。 文本文件如下所示:

John Robbins
Teresa Jones 

我的結構定義如下:

struct people {

char name[20];
};

人員聲明結構:

 struct people *persons[2];

聲明新結構后,我用以下代碼讀取名稱:

for(i=0; i<2; i++)
{  
  fscanf(dp, "%[^\n]s", &persons[i].name[20]);
}

但是,一旦將名稱輸出到控制台,就會收到以下信息:

hn Robbins
sa Jones

我已經進行了廣泛的研究,無法找到解決此問題的方法。 有沒有人遇到這個問題?

fscanf(dp, "%[^\n]s", &persons[i].name[20]);

這會將行讀到換行符,然后嘗試讀取s ,這將失敗。 直到換行的行將存儲在name數組的結尾之后的人員結構中(這意味着它將覆蓋到persons數組的下一個元素中。

您想要類似的東西:

fscanf(dp, " %19[^\n]%*[^\n]", persons[i].name);

而是-初始空間跳過前導空格(包括前一行中的任何換行符。) %19[^\\n]最多讀取19個字符或最多換行符並將其存儲,然后由終止NULL(因此將使用整個20個字節的name數組,但沒有更多)。 %*[^\\n]將讀取直到(但不包括)換行符的行上的所有其他字符,並將它們扔掉。

您還想檢查fscanf調用的返回值,以確保它沒有收到錯誤或文件結尾:

#define MAX_PEOPLE    2
struct people persons[MAX_PEOPLE];

i = 0;
while (i < MAX_PEOPLE && fscanf(dp, " %19[^\n]%*[^\n]", persons[i].name) > 0)
    i++;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM