Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中使用fscanf读取多个字符串_C_Scanf - Fatal编程技术网

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

在C中使用fscanf读取多个字符串,c,scanf,C,Scanf,我在这样一个文件中有一行:“33 sun 15:00 FCM-SIF 3-0”。 我需要提取所有数据。到目前为止,我已经有了这段代码,在提取字符串“sun”、“FCM”和“SIF”时会出现一点错误。它使“sun”变成“sunFCMSIM”,“FCM”变成“FCMSIF”,而“SIF”是正确的 您可以从多行创建输入文件,如上面的一行。 那么,如何确保提取的信息是正确的呢 #include <stdio.h> #include <stdlib.h> #define LINE

我在这样一个文件中有一行:“33 sun 15:00 FCM-SIF 3-0”。 我需要提取所有数据。到目前为止,我已经有了这段代码,在提取字符串“sun”、“FCM”和“SIF”时会出现一点错误。它使“sun”变成“sunFCMSIM”,“FCM”变成“FCMSIF”,而“SIF”是正确的

您可以从多行创建输入文件,如上面的一行。 那么,如何确保提取的信息是正确的呢

#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;
}
#包括
#包括
#定义LINEBUFFERSIZE 50
#定义TEAMNAMELENGTH 3
#定义工作日长度3
void\uuuu构造(字符文件名[fileName\u MAX]){
文件*输入文件;
字符缓冲区[LINEBUFFERSIZE];
//打开输入文件
inputFile=fopen(文件名,“r”);
//读取所有匹配项并创建
while(fgets(缓冲区、LINEBUFFERSIZE、inputFile)!=NULL){
整数回合、小时、分钟、家庭目标、家庭目标;
char outTeam[TEAMNAMELENGTH]、homeTeam[TEAMNAMELENGTH]、weekday[WEEKDAYLENGTH];
fscanf(输入文件,“%d%3s%2d:%2d%3s-%3s”、&轮、工作日、小时、分钟、主队、外队);
printf(“圆形:%d\n”,圆形);
printf(“%s%02d:%02d\n”,工作日,小时,分钟);
//printf(“%s-%s\n”,homeTeam,outTeam);
}
fclose(输入文件);
}
int main(){
/*字符输入文件[FILENAME_MAX];
printf(“输入文件>”);scanf(“%s”,&inputFile)*/
__建造(“superliga-2009-2010”);
返回0;
}

根据
fscanf
的文档,
s
转换说明符:

匹配一系列非空白字符;下一个指针必须是指向字符数组的指针,该数组的长度足以容纳输入序列和自动添加的终止空字符('\0')

缓冲区不够大,无法容纳空终止符。如果您修复了该问题,例如通过如下方式声明
outTeam
homeTeam
weekday

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

您的代码按预期工作。

根据
fscanf
的文档,
s
转换说明符:

匹配一系列非空白字符;下一个指针必须是指向字符数组的指针,该数组的长度足以容纳输入序列和自动添加的终止空字符('\0')

缓冲区不够大,无法容纳空终止符。如果您修复了该问题,例如通过如下方式声明
outTeam
homeTeam
weekday

char outTeam[TEAMNAMELENGTH + 1], homeTeam[TEAMNAMELENGTH + 1], weekday[WEEKDAYLENGTH + 1];
你的代码按预期工作。

上帝保佑你:)该死的我错过了:)谢谢伙计上帝保佑你:)该死的我错过了:)谢谢伙计