fscanf 函数 returns -1 当预期为 9 时
fscanf function returns -1 when 9 is expected
第一行如下
Fre 18/07 18.30 FCN - FCV 3 - 2 3.349
扫描函数为:
struct match_data match[300];
while(!feof(file_pointer))
{
if(fscanf(file_pointer, "%[^ ] %d/%d %[^ ] %[^ ] - %[^ ] %d - %d %lf \n",
match[i].match_day, &(match[i].match_date_day), &(match[i].match_date_month),
match[i].match_time, match[i].match_home_team, match[i].match_away_team,
&(match[i].match_home_goals), &(match[i].match_away_goals), &(match[i].match_spectators)) != 9);
{
printf("Error Reading file");
return -1;
}
我希望看到将以下内容放入结构中
match_day: FRI
match_date_day: 18
match_date_month: 07
match_time: 18.30
match_home_team: FCN
match_away_team: FCV
match_home_goals: 3
match_away_goals: 2
match_spectators: 3.349
不过如标题所说,该函数并没有return9,测试时returns -1
编辑
添加了结构
struct match_data
{
char match_day[4];
int match_date_day;
int match_date_month;
char match_time[6];
char match_home_team[4];
char match_away_team[4];
int match_home_goals;
int match_away_goals;
double match_spectators;
};
并添加到我声明结构数组的扫描中
您在 if
条件后直接放了一个分号,使代码 运行 错误成为空语句。
后面的复合语句不管有没有错误都会执行
为避免此错误和其他 "stupid" 错误,您应该尽可能多地启用编译器警告。例如,在 gcc
上,这意味着向编译器添加 -Wall -Wextra
个参数(您可以查看文档以了解其他警告以启用)。
第一行如下
Fre 18/07 18.30 FCN - FCV 3 - 2 3.349
扫描函数为:
struct match_data match[300];
while(!feof(file_pointer))
{
if(fscanf(file_pointer, "%[^ ] %d/%d %[^ ] %[^ ] - %[^ ] %d - %d %lf \n",
match[i].match_day, &(match[i].match_date_day), &(match[i].match_date_month),
match[i].match_time, match[i].match_home_team, match[i].match_away_team,
&(match[i].match_home_goals), &(match[i].match_away_goals), &(match[i].match_spectators)) != 9);
{
printf("Error Reading file");
return -1;
}
我希望看到将以下内容放入结构中
match_day: FRI
match_date_day: 18
match_date_month: 07
match_time: 18.30
match_home_team: FCN
match_away_team: FCV
match_home_goals: 3
match_away_goals: 2
match_spectators: 3.349
不过如标题所说,该函数并没有return9,测试时returns -1
编辑
添加了结构
struct match_data
{
char match_day[4];
int match_date_day;
int match_date_month;
char match_time[6];
char match_home_team[4];
char match_away_team[4];
int match_home_goals;
int match_away_goals;
double match_spectators;
};
并添加到我声明结构数组的扫描中
您在 if
条件后直接放了一个分号,使代码 运行 错误成为空语句。
后面的复合语句不管有没有错误都会执行
为避免此错误和其他 "stupid" 错误,您应该尽可能多地启用编译器警告。例如,在 gcc
上,这意味着向编译器添加 -Wall -Wextra
个参数(您可以查看文档以了解其他警告以启用)。