我有一个文本文件,如下所示:
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功能,它停止工作,没有任何输出。 我做错了什么?
答案 0 :(得分:3)
对于
行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]);*/
}
答案 1 :(得分:0)
首先检查您的文件描述符是否成功指向您的文件
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-&gt; 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