[英]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.