簡體   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