繁体   English   中英

在C中使用fscanf读取多个字符串

[英]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终止符。 如果您解决了该问题,例如通过声明outTeamhomeTeamweekday ,如下所示:

char outTeam[TEAMNAMELENGTH + 1], homeTeam[TEAMNAMELENGTH + 1], weekday[WEEKDAYLENGTH + 1];

您的代码按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM