c - 在 C 中使用 fscanf 读取文件
问题描述
我有 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;
}
解决方案
fgets
如果您已经在使用fscanf
(只需继续扫描,直到找到一个),您也不需要EOF
在 while 循环中使用。此外,您需要将 正确定义,
为分隔符,否则第一个分隔符%s
也会将逗号读入字符串。这个while
循环有效:
while(fscanf(file, "%10[^,], %d, %f\n", url, &num, &rank) != EOF) {
printf("Link: %s; Number: %d; Rank: %f\n", url, num, rank);
}
我将分隔符定义为逗号,所以第一个字符串应该读取字符,直到遇到逗号%10[^,]
(读取格式说明符中提到的最多 10 个字符),然后是逗号、整数、逗号、浮点数,然后是换行符( \n
)。
输出:
Link: url31; Number: 3; Rank: 0.262355
Link: url21; Number: 1; Rank: 0.184311
Link: url34; Number: 6; Rank: 0.157685
Link: url22; Number: 4; Rank: 0.152009
Link: url32; Number: 6; Rank: 0.092575
Link: url23; Number: 4; Rank: 0.077676
Link: url11; Number: 3; Rank: 0.073388
推荐阅读
- html - 嵌套的 Bootstrap 模式在页面中间创建了一个不需要的滚动条
- gstreamer - [gstreamer]如何从 gstplugin 更改视频分辨率
- c# - HttpListener 不获取带有# 符号的参数
- python - uwsgi的应用词典中mountpoint是什么意思?
- python - 在 ANSIBLE AWX 中运行 PYTHON UTF-8 脚本
- django - 使用自定义上下文处理器时,“AnonymousUser”对象不是可迭代错误
- html - django 响应方法 POST 不渲染到 html 模板
- salesforce - 如何将值从一个 VF 页面传递到另一个页面并刷新发送值的页面(两个 vf 页面都将用作闪电记录页面上的组件)
- reactjs - React Native & Firebase Cloud Messaging:如何避免重复推送通知?
- javascript - 防止元素拖出画布