c - 在C中的链表中搜索值
问题描述
我在 C 语言中创建了一个程序,其中包含坐标和位置 ID 的 CSV 文件被插入到链接列表中。现在我想创建一个单独的函数,打印出 x 坐标等于或大于 20 的所有位置 ID。但是,出于某种原因,我的程序根本没有打印出任何值。我该如何解决?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define MAX 10
struct data {
double x, y, id;
struct data *next;
}*head;
typedef struct data data;
void read_csv();
void search();
int main(int argc, char *argv[]) {
read_csv();
}
void read_csv() {
// Opens the CSV datafile
FILE *fp = fopen("data.csv", "r");
char buffer[MAX];
struct data** tail = &head;
while (fgets(buffer, MAX, fp)) {
data *node = malloc(sizeof(data));
node->x = atof(strtok(buffer, ","));
node->y = atof(strtok(NULL, ","));
node->id = atof(strtok(NULL, ","));
node->next = NULL;
*tail = node;
tail = &node->next;
}
search();
}
void search() {
struct data *temp;
temp = head;
while(temp!=NULL) {
if (temp->x >= 20) {
printf("%lf\n",temp->id);
temp = temp->next;
}
}
}
这是 CSV 输入文件:
19.743748,-11.838155,0.947989
19.810734,-11.838155,0.947972
19.877850,-11.838155,0.947953
19.945097,-11.838155,0.947930
20.012476,-11.838155,0.947904
20.079988,-11.838155,0.947875
20.147631,-11.838155,0.947844
20.215405,-11.838155,0.947812
20.283312,-11.838155,0.947780
解决方案
temp = temp->next;
必须在 if 子句之外。
void search() {
struct wake *temp;
temp = head;
while(temp!=NULL) {
if (temp->x >= 20) {
printf("%lf\n",temp->id);
}
temp = temp->next;
}
}
推荐阅读
- c++ - 显示opencv矩阵时出现内存错误
- javascript - 选择元素的选项属性在 vue.js 2.0 中不起作用
- angular - 通过 *ngFor 打印的角度更新数组
- hibernate - 为什么我的 MariaDB 序列会生成一个负数?
- vue.js - 类更改属性的转换
- ssrs-2012 - SSRS 工具提示未显示
- azure-ad-b2c - Microsoft.Identity.Client 返回格式错误的结果
- python - 在内存中存储一个大的稀疏矩阵来计算特征值
- .htaccess - 删除内容位置响应标头
- vuejs2 - VueJS - 嵌套 v-on:click 和 v-if 使组件消失