sscanf 用于格式化文件中的字符串
sscanf for formatting string from file
作为家庭作业的一部分,我需要加载一个包含以下格式数据的文件:
R1 Fre 17/07/2015 18.00 FCN - SDR 0 - 2 3.211
R1 Lor 18/07/2015 16.00 FCM - VFF 2 - 0 7.232
为此,我使用 fgets 将字符串存储在临时字符串中,然后使用 sscanf 格式化字符串,同时逐行遍历文件。
while(fgets(temp, MAX_LINE_SIZE, input_file)!= NULL) {
sscanf(temp,
" %*s %3s %d / %d / %d %s %3s - %3s %d - %d %6s",
round[i].match[j].weekday,
&round[i].match[j].day,
..... And so on ....
j++;
}
当前输出为:
Weekday: Fre18.00FCNSDR3.211
Day: 17
Month: 7
Year: 2015
Start: 18.00FCNSDR3.211
Home team: FCNSDR3.211
Away team: SDR3.211
Score: 0 - 2
Viewers: 3.211
预期输出为:
Weekday: Fre
Day: 17
Month: 7
Year: 2015
Start: 18.00
Home team: FCN
Away team: SDR
Score: 0 - 2
Viewers: 3.211
sscanf 中带有 %s 占位符的字符串似乎出于某种原因将它们放在一起。
非常感谢所有帮助。
您确定要将 Fre
之类的字符串存储在 4 字节字符数组中吗?
%3s
实际读入4个字节。 F
、r
、e
和 [=15=]
。如果您使用的数组太小,则会覆盖 [=15=]
,导致字符串包含内存中接下来出现的任何内容(在这种情况下,更多字符串)。
作为家庭作业的一部分,我需要加载一个包含以下格式数据的文件:
R1 Fre 17/07/2015 18.00 FCN - SDR 0 - 2 3.211
R1 Lor 18/07/2015 16.00 FCM - VFF 2 - 0 7.232
为此,我使用 fgets 将字符串存储在临时字符串中,然后使用 sscanf 格式化字符串,同时逐行遍历文件。
while(fgets(temp, MAX_LINE_SIZE, input_file)!= NULL) {
sscanf(temp,
" %*s %3s %d / %d / %d %s %3s - %3s %d - %d %6s",
round[i].match[j].weekday,
&round[i].match[j].day,
..... And so on ....
j++;
}
当前输出为:
Weekday: Fre18.00FCNSDR3.211
Day: 17
Month: 7
Year: 2015
Start: 18.00FCNSDR3.211
Home team: FCNSDR3.211
Away team: SDR3.211
Score: 0 - 2
Viewers: 3.211
预期输出为:
Weekday: Fre
Day: 17
Month: 7
Year: 2015
Start: 18.00
Home team: FCN
Away team: SDR
Score: 0 - 2
Viewers: 3.211
sscanf 中带有 %s 占位符的字符串似乎出于某种原因将它们放在一起。
非常感谢所有帮助。
您确定要将 Fre
之类的字符串存储在 4 字节字符数组中吗?
%3s
实际读入4个字节。 F
、r
、e
和 [=15=]
。如果您使用的数组太小,则会覆盖 [=15=]
,导致字符串包含内存中接下来出现的任何内容(在这种情况下,更多字符串)。