c - 在c中读取文件的第二个字
问题描述
我在 c 中有这个函数,它将文件中的所有数字保存在一个整数变量中。但是我想进行更改,以便我可以将每行空格之间的第二个数字保存到向量中,然后打印所有向量。以下是 file.txt 的示例:
123 19
321 18
432 9
876 16
875 17
这是必须更改的代码:
void LerVetor(int *V, int *N) {
FILE *fp;
int marks;
fp = fopen("dados3.txt", "r");
if(fp == NULL)
printf("Falha ao abrir ficheiro\n");
rewind(fp);
do {
fscanf(fp, "%d", &marks);
printf("%d\n", marks);
}
while(!feof(fp));
fclose(fp);
}
输出与 file.txt 相同,因为代码只是打印文件的内容。
简历:仅将每行的第二个数字(例如:19、18、9...)保存在一个向量中,然后打印该向量。
解决方案
尝试使用逐行读取文件fgets
并使用sscanf
. 如果您在读取之前不知道向量的长度(= 行数),您可以使用以下命令动态增加每个读取行的向量realloc
:
char line[20];
int *vector = NULL;
int length = 0;
// open file
while(fgets(line, sizeof(line), fp) != NULL) {
vector = realloc(vector, (length+1)*sizeof(int));
sscanf(line, "%*d %d\n", &vector[length++]);
}
// close file
然后你可以像这样打印结果向量:
printf("Read %d numbers:\n", length);
for (int i=0; i<length; i++)
printf("%d\n", vector[i]);
当然不要忘记free
分配的内存。
推荐阅读
- php - 如何使用 PHP 将数据从 html 数据表单导出到 CSV 或 excel 文件?
- javascript - JavaScript CSS 移动元素
- python - Python SpeechRecognition 使其他声音静音
- python - 一个人如何将完美的云秘密与卷曲一起使用?
- django - Django 中的安全文件上传 - CSV/Excel 文件
- php - 在 Laravel 7 中存储和更新图像的最佳方式是什么?更新图像时在laravel中调用null的成员函数move()?
- dependency-injection - “静态域助手类”是环境上下文反模式吗?
- ckeditor - 如何阻止 Ckeditor 4 从删除类
?
- javascript - 无法通过 id Discord.js 获取用户的用户名
- mysql - MySQL 5.7 innodb 集群节点因大更新而失败