Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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 在文本文件中查找行的特定信息_C_File_Import_Lines - Fatal编程技术网

C 在文本文件中查找行的特定信息

C 在文本文件中查找行的特定信息,c,file,import,lines,C,File,Import,Lines,似乎在任何地方都找不到有关如何从.txt文件的特定行中查找信息的任何信息。 就像曲棍球比赛的结果一样, 这条线可能看起来像: 19.00 01.01.2010团队1-团队2 5-10 2000 20.00 02.20.2010第2组-第3组7-11 3400 19.00 03.30.2010团队1-团队4-团队4 1000 等等 那么如果我只是想从与第三队和第四队的比赛中得到结果 这就是我现在所拥有的,但是如果我想输入2-2并得到每一行中都有数字2的话 多谢各位 #include <std

似乎在任何地方都找不到有关如何从.txt文件的特定行中查找信息的任何信息。 就像曲棍球比赛的结果一样, 这条线可能看起来像:

19.00 01.01.2010团队1-团队2 5-10 2000

20.00 02.20.2010第2组-第3组7-11 3400

19.00 03.30.2010团队1-团队4-团队4 1000

等等

那么如果我只是想从与第三队和第四队的比赛中得到结果

这就是我现在所拥有的,但是如果我想输入2-2并得到每一行中都有数字2的话

多谢各位

#include <stdio.h>
#include <string.h>

int main ( void ){
    char target [ 64 ];
    printf( "Enter a score:" );
    scanf("%s",&target );

    static const char filNavn[] = "text";
    FILE *fil = fopen( filNavn, "r" );
    if ( fil != NULL ){
        char line [ 64 ];

        while( fgets( line, sizeof line, fil ) != NULL ){

            if ( strstr( line, target ) != NULL ){
                printf("%s\n", line);
            }
        }
        fclose( fil );
    }
    else{
         perror( filNavn );
    }
    return 0;
}
#包括
#包括
内部主(空){
字符目标[64];
printf(“输入分数:”);
scanf(“%s”和“目标”);
静态常量char filNavn[]=“文本”;
文件*fil=fopen(filNavn,“r”);
如果(fil!=NULL){
字符行[64];
while(fgets(line,sizeof line,fil)!=NULL){
if(strstr(行,目标)!=NULL){
printf(“%s\n”,第行);
}
}
fclose(fil);
}
否则{
佩罗尔(费尔纳文);
}
返回0;
}

如果您对文件中行的格式非常确定,则可以使用
sscanf
。比如说

int score = atoi(target);
while( fgets( line, sizeof line, fil ) != NULL ){
int t1, t2, s1, s2;
sscanf(line, "Team%d vs Team%d %d-%d", &t1, &t2, &s1, &s2);
if (s1 == score || s2 == score)
    /* Do something here */
}
我看到一些错误:

  • 代码行7中
    应该是:

    /* Let's leave it easy, there are somethings you must 
       read about safety reading. */
    gets( target ); 
    
  • PD:如果要使用该语法,您在target之前添加了一个与(&),
    &target[0]

  • 代码行12
    中,您声明了一个新变量,这样做不好,因此我建议您在声明目标字符串的位置声明它

  • 在本例中,您说您的数据保存在
    42个字符的插槽中,因此请扫描相同大小的
    代码行12

    char line[ 43 ]. 
    
  • 同样,您的目标不应大于第5行代码

    char target[ 43 ].
    
  • 关于
    strstr()
    函数,其工作方式如下:

  • 找到子字符串(strstrstr())。返回指向str1中第一个出现的str2的指针,如果str2不是str1的一部分,则返回空指针


    我应该用我以前的while替换它还是只是复制它?你必须根据你的需要更改上面的代码。我假设格式为
    Team1 vs Team2-2
    。如果有空格,也包括它们。嗯,如果我只想找到以2-2结束的比赛,或者有超过3个进球的比赛,那该怎么办?
    s1
    s2
    是两个结果分数。你可以用你想要的方式使用它们。你应该列出你想要显示的所有组合和一些文件内容的示例。好的,我再多写几行谢谢你,阿尔贝托,我正在读的文本文件最后没有.txt,当我写.txt时,它不会读,但如果我不写它,它会读。Atm我有它,所以我现在可以找到每一场比赛都有相同的结果:)但我也想知道如何找到所有进球超过3个的比赛,如果你能帮我的话?