【发布时间】:2022-11-18 01:47:30
【问题描述】:
我有一个名为 pageRankList 的文件,其中包含 url、传出链接的数量、按该顺序排列的页面排名。 如果我想获得给定 URL 的 pageRank。我怎么能用 fscanf 或其他功能做到这一点?
url23 4 0.0405449
url31 3 0.0371111
url22 5 0.0300785
url34 4 0.0288782
url21 2 0.0247087
url11 3 0.0235192
url32 2 0.0227647
这是我到目前为止所拥有的,但是当我运行它时,它在未知地址错误上给了我一个 SEGV,我不知道为什么 :(
static double getPageRank(char *url) {
double pageRank = 0;
FILE *fp = fopen("pageRankList.txt", "r");
char str[1000];
int counter = 0;
while (fscanf(fp, " %98s", str) != EOF) {
if (strcmp(url, str) == 0) {
counter++;
continue;
}
if (counter == 2) {
pageRank = atof(str);
printf("%f\n", pageRank);
break;
}
}
fclose(fp);
return pageRank;
}
【问题讨论】:
-
你尝试了什么调试?至少增加一些中间值的输出,不是吗?请发一个minimal reproducible example。
-
好吧,您没有检查文件是否已成功打开。将
NULL传递给fscanf或fclose通常是导致崩溃的好方法。至于逻辑,我看不出计数器怎么会是 2,它只会匹配该行第一次读取的字符串。也不知道为什么continue在那里。您可能会考虑一次读取一行并使用sscanf解析该行,如果 url 匹配则返回排名。