[英]Reading multiple strings with fscanf in C
我在这样的文件中有一行:“ 33 sun 15:00 FCM-SIF 3-0”。 我需要提取所有数据。 到目前为止,我已经有了这段代码,在提取字符串“ sun”,“ FCM”和“ SIF”时会出错。 当“ SIF”正确时,将“ sun”转换为“ sunFCMSIM”,将“ FCM”转换为“ FCMSIF”。
您可以像上述一样从多行制作输入文件。 那么,如何确保正确提取此信息?
#include <stdio.h>
#include <stdlib.h>
#define LINEBUFFERSIZE 50
#define TEAMNAMELENGTH 3
#define WEEKDAYLENGTH 3
void __construct(char fileName[FILENAME_MAX]) {
FILE *inputFile;
char buffer[LINEBUFFERSIZE];
// Open input file
inputFile = fopen(fileName, "r");
// Read all matches and create
while(fgets(buffer, LINEBUFFERSIZE, inputFile) != NULL){
int round, hour, minute, homeGoals, outGoals;
char outTeam[TEAMNAMELENGTH], homeTeam[TEAMNAMELENGTH], weekday[WEEKDAYLENGTH];
fscanf(inputFile, "%d %3s %2d:%2d %3s - %3s", &round, weekday, &hour, &minute, homeTeam, outTeam);
printf("Round: %d\n", round);
printf("%s %02d:%02d\n", weekday, hour, minute);
//printf("%s - %s\n", homeTeam, outTeam);
}
fclose(inputFile);
}
int main() {
/*char inputFile[FILENAME_MAX];
printf("Enter input file> "); scanf("%s", &inputFile);*/
__construct("superliga-2009-2010");
return 0;
}
根据fscanf
的文档, s
转换说明符:
匹配一系列非空格字符; 下一个指针必须是指向字符数组的指针,该指针的长度足以容纳输入序列和终止的空字符 ('\\ 0'),该字符会自动添加。
您的缓冲区不足以容纳NULL终止符。 如果您解决了该问题,例如通过声明outTeam
, homeTeam
和weekday
,如下所示:
char outTeam[TEAMNAMELENGTH + 1], homeTeam[TEAMNAMELENGTH + 1], weekday[WEEKDAYLENGTH + 1];
您的代码按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.