[英]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.