gpt4 book ai didi

c - 为什么我的正则表达式函数只在第一次运行?

转载 作者:行者123 更新时间:2023-11-30 15:04:37 25 4
gpt4 key购买 nike

我正在为家庭作业编写一些代码,该代码是在文本文件中搜索某些模式并生成报告。目前为了测试它,我只是将报告打印到屏幕上。但我的搜索功能似乎只在第一次运行。我已经单独测试了正则表达式,它们都提取了正确的匹配项,但是一旦我将其放入函数中,它仅在第一次运行时才有效。谁能向我解释一下为什么会发生这种情况?

#include <stdio.h>
#include <stdlib.h>
#include <regex.h>


// Report expressions
char *reports[5] = {"^ {0,}[0-9]{1,4}", "S", "L", "S {0,1}(1|2)", "^ {0,}[0-9]{1,4} {1,} L | 3$"};

void search(FILE *fp, char *report, int index) {
regex_t reg;
char buf[256];
int reti = regcomp(&reg,report,REG_EXTENDED);

if(reti) {
printf("Regex compilation failed, noob\n");
exit(1);
}
printf("Report %d\n", index);

while(fgets(buf,sizeof(buf),fp) != NULL) {
//printf("%s",buf);
reti = regexec(&reg,buf,0,NULL,0);
if(!reti) { //if there's a match
printf("%s",buf);
} else if(reti == REG_NOMATCH) {
printf("No match\n");
}
}

regfree(&reg);
}

int main(void) {
FILE *fp;

fp = fopen("./Hammer.data","r");

if(fp == NULL) {
perror("Error opening file");
return(-1);
}

for(int i = 0;i < 5;i++) {
search(fp, reports[i],i+1);
}

fclose(fp);

return(0);
}

最佳答案

while(fgets(buf,sizeof(buf),fp) != NULL) 

这将导致 fp 指向文件末尾。因此,下次调用该函数时,fgets 将立即返回 NULL。一种修复方法是在 fgets 循环之前倒回文件指针。

关于c - 为什么我的正则表达式函数只在第一次运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40229406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com