簡體   English   中英

使用fgets && sscanf從數組中讀取

[英]Using fgets && sscanf to read from an array

我有一個文本文件,看起來像:

C M 2/1/2015 18280 "2107070770"
C U 2/1/2015 18300 "2107070770"

文本文件有多行。 我試圖將每一行存儲到一個字符串數組中,然后將每個值存儲到變量中,我想使用它。 (我成功打開fopen文件)

我用以下方式存儲每一行​​:

char line[50];
char *lines[40];
char *eof ; 
int i ; 
while( (eof = fgets(line, 50, in)) != NULL )
{
    lines[i] = strdup(eof);
    i++;
}

然后,我試圖將每個值存儲到變量中,方法如下:

for( j = 0; j <= 39 ; j++)
{
    sscanf( lines[j], "%c %c %d/%d/%d %d %s", &(operation), &(destination), &(day) , &(month) , &(year) , &(name)) ;    

    /*printf("%s\n", lines[j]);*/
}

所以,我可以分別處理每一行。 我的代碼成功地將每一行存儲到數組中,但在添加sscanf函數后,它會在沒有任何輸出的情況下停止工作。 我做錯了什么?

對於線

C U 2/1/2015 18300 "2107070770"

在2015年之后,您缺少整數18300.格式字符串中有格式說明符,但沒有相應的變量來存儲它。

操作后,目的地,日,月,年, missing_variable ,名稱

//so the right one will be
// assuming name is a char*

int my_int = 0;
for( j = 0; j <= 39 ; j++)
{
    sscanf( lines[j], "%c %c %d/%d/%d %d %s", 
    &(operation), &(destination), &(day) , &(month) , &(year), 
    &(my_int), name) ;    

    /*printf("%s\n", lines[j]);*/
}

首先檢查文件描述符是否成功指向您的文件

if(in==NULL)
  exit(-1); // Hope this is already in the code.

更改

int i ; 

int i=0; // automatic variables are not initialized by default

ISO / IEC 9899:201x 6.7.9-> 10

如果未顯式初始化具有自動存儲持續時間的對象,則其值不確定。

當有人指出你在sscanf中有一個缺失的變量。 如果你希望在age之后撕掉整個東西,比如18280 "2107070770"到字符串name你可以這樣做:

sscanf( lines[j], "%c %c %d/%d/%d %d %[^\t\n]", 
    &(operation), &(destination), &(day) , &(month) , &(year), 
    &(my_int), name) ;

此外,有人指出name衰減到指針,所以你不需要像&name那樣傳遞它

暫無
暫無

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

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