0

似乎无法在任何地方找到关于我如何从 .t​​xt 文件中的特定行查找信息的任何信息。就像这条线可能是曲棍球比赛的结果一样,这条线可能看起来像:

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

20.00 02.20.2010 Team2 - Team3 7 - 11 3400

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

等等 ...

所以,如果我只想从与 team3 和 team4 的比赛中得到结果?

这就是我目前所拥有的,但如果我想输入 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;
}
4

2 回答 2

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 */
}
于 2012-11-22T09:59:56.643 回答
0

我看到的一些错误:

  1. code-line 7它应该是:

    /* Let's leave it easy, there are somethings you must 
       read about safety reading. */
    gets( target ); 
    

PD:如果你想使用它应该使用的语法,你在目标之前添加了一个&符号(&)&target[ 0 ],;

  1. code-line 12您声明了一个新变量时,这样做不好,所以我建议您在声明目标字符串的地方声明它。

  2. 在您说的示例中,您的数据保存在插槽中42 characters,因此以相同的大小进行扫描code-line 12

    char line[ 43 ]. 
    
  3. 以同样的方式,您的目标不应大于 line code-line 5

    char target[ 43 ].
    
  4. 关于strstr()函数,它以这种方式工作Cplusplus strstr() 行为描述

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

于 2012-11-22T12:04:39.217 回答