【发布时间】:2025-12-04 01:45:02
【问题描述】:
我有 c 代码,它在 while 循环中读取文件,将所有信息 fscanf 到 url、num 和 rank 变量中,然后将其打印出来。但是,输出不正确。
主要问题:
- 为什么浮点数只是零,如何解决这个问题?
- 如何去掉url后面的逗号? Url 可以是任意长度(char url[10] 就是一个例子)。在每个逗号上先拆分行,然后使用 fscanf 将信息添加到变量中会更好吗?
我有一个包含以下信息的文件:
url31, 3, 0.2623546
url21, 1, 0.1843112
url34, 6, 0.1576851
url22, 4, 0.1520093
url32, 6, 0.0925755
url23, 4, 0.0776758
url11, 3, 0.0733884
这是我得到的:
Link: url21,; Number: 1; Rank: 0.000000
Link: url34,; Number: 6; Rank: 0.000000
Link: url22,; Number: 4; Rank: 0.000000
Link: url32,; Number: 6; Rank: 0.000000
Link: url23,; Number: 4; Rank: 0.000000
Link: url11,; Number: 3; Rank: 0.000000
Link: url11,; Number: 3; Rank: 0.000000
预期输出:
Link: url31; Number: 3; Rank: 0.2623546
Link: url21; Number: 1; Rank: 0.1843112
Link: url34; Number: 6; Rank: 0.1576851
Link: url22; Number: 4; Rank: 0.1520093
Link: url32; Number: 6; Rank: 0.0925755
Link: url23; Number: 4; Rank: 0.0776758
Link: url11; Number: 3; Rank: 0.0733884
我的代码:
#define MAXSTR 1000
int main () {
FILE *file;
char url[10];
int num;
float rank;
if ((file = fopen("pages.txt", "r")) == NULL) {
printf("Error.\n");
return -1;
}
while(fgets(lines, MAXSTR, file) != NULL) {
fscanf(file, "%s %d %f", &url[0], &num, &rank);
printf("Link: %s; Number: %d; Rank: %f\n", url, num, rank);
}
return 0;
}
【问题讨论】:
-
fscanf格式字符串不会自动将逗号识别为字段分隔符。具体来说,例如,%s将扫描后跟空格的字符串,该字符串会将url31,作为第一个字符串读取(请记住,逗号只是fscanf的另一个非空白字符)。该数字看起来被正确读取,但顺序错误。您确定您显示的是您阅读的文件中行的顺序吗?%d在逗号处结束扫描,然后扫描尝试将逗号读取为浮点数,这将为您提供 0。 -
这些是分号,不是逗号,但这就是问题所在——也许把它写成答案?
-
@lurker 是的,我明白为什么它将逗号读入 %s,有什么办法可以解决这个问题吗?我照原样复制文件,所以一切都应该按正确的顺序排列 - url (str)、number (int)、rank (float)。
-
@CarlNorum 分号在格式化的 printf 中,我选择添加它们,因此它将逗号读入字符串可以更加明显。
-
@CarlNorum 原来是逗号,阅读文本文件。
标签: c