似乎无法在任何地方找到有关如何从.txt文件中的特定行查找信息的信息。 喜欢这条线可能是曲棍球比赛的结果, 这条线看起来像:
19.00 01.01.2010 Team1 - Team2 5 - 10 2000
20.00 02.20.2010 Team2 - Team3 7 - 11 3400
19.00 03.30.2010 Team1 - Team4 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;
}
答案 0 :(得分: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 */
}
答案 1 :(得分:0)
我看到一些错误:
在code-line 7
中应该是:
/* Let's leave it easy, there are somethings you must
read about safety reading. */
gets( target );
PD:如果你想使用它应该使用的语法,你在目标之前添加了&符号(&amp;),&target[ 0 ]
;
在code-line 12
中你声明了一个新变量,这样做并不好,所以我建议你在声明目标字符串的地方声明它。
在示例中,您说您的数据已保存在42 characters
的广告位中,因此请扫描相同尺寸code-line 12
。
char line[ 43 ].
以同样的方式,你的目标不应该大于行code-line 5
。
char target[ 43 ].
关于strstr()
功能,它以这种方式工作Cplusplus strstr() behavior description:
找到子字符串(strstr())。返回指向str1中第一次出现str2的指针,如果str2不是str1的一部分,则返回空指针。