【发布时间】:2016-03-01 03:32:18
【问题描述】:
输入:
5, 08:00:00, 2, 30
5, 08:00:10, 6, 0
程序应该输出:
Heart Rate:
08:00:00: 30
但它却输出:
Heart Rate:
08:00:10: 30
基本上,我遇到的问题是,对于每个 Element 结构,它都会打印相同的时间戳,即最后输入的时间戳。
有人可以帮忙吗?对不起,如果我太简短了,我不想让这篇文章超载。如果您需要更多说明,请告诉我。
typedef struct{
char *timestamp;
int value;
}Element;
typedef char f_string[MAXCHARS + 1];
typedef struct {
int nfields;
f_string field[MAXFIELDS];
} csv_line;
void main(){
int i, j;
csv_line data;
int run = 1;
Element temperature;
temperature.timestamp = "\0";
temperature.value = -1;
Element heart_rate;
heart_rate.timestamp = "\0";
heart_rate.value = -1;
Element systolic_pressure;
systolic_pressure.timestamp = "\0";
systolic_pressure.value = -1;
Element diastolic_pressure;
diastolic_pressure.timestamp = "\0";
diastolic_pressure.value = -1;
Element respiration_rate;
respiration_rate.timestamp = "\0";
respiration_rate.value = -1;
/* initialize health data records for each patient */
for( i=0; i < MAXPATIENTS; i++ ){
record[i].id = i + 1;
for( j=0; j < MAXTYPES; j++ ){
record[i].buffer[j].start = 0;
record[i].buffer[j].end = 0;
}
}
printf("Welcome to the Health Monitoring System\n\n");
while (run == 1) {
data = get_line();
char *timestamp = data.field[1];
int value = atoi(data.field[3]);
int type = atoi(data.field[2]);
switch(type) {
case 1:
temperature.timestamp = timestamp;
temperature.value = value;
break;
case 2:
heart_rate.timestamp = timestamp;
heart_rate.value = value;
break;
case 3:
systolic_pressure.timestamp = timestamp;
systolic_pressure.value = value;
break;
case 4:
diastolic_pressure.timestamp = timestamp;
diastolic_pressure.value = value;
break;
case 5:
respiration_rate.timestamp = timestamp;
respiration_rate.value = value;
break;
case 6:
run = 0;
break;
}
}
print_data(atoi(data.field[0]), temperature, heart_rate, systolic_pressure, diastolic_pressure,
respiration_rate);
printf("\nEnd of input\n");
}
void print_data(int id, Element temperature, Element heart_rate, Element systolic_pressure,
Element diastolic_pressure, Element respiration_rate) {
printf("-----------------------------------------------------------------------\n");
printf("Readings for Patient ID = %d are:\n", id);
printf("Temperature:\n");
printf("%s: %.1f\n", temperature.timestamp, (float)temperature.value / 10);
printf("Heart Rate:\n");
printf("%s: %d\n", heart_rate.timestamp, heart_rate.value);
printf("Systolic Pressure\n");
printf("%s: %d\n", systolic_pressure.timestamp, systolic_pressure.value);
printf("Diastolic Pressure\n");
printf("%s: %d\n", diastolic_pressure.timestamp, diastolic_pressure.value);
printf("Respiration Rate\n");
printf("%s: %d\n", respiration_rate.timestamp, respiration_rate.value);
printf("-----------------------------------------------------------------------\n");
}
【问题讨论】:
-
复制指针不会复制它指向的内存。
-
那我该怎么办呢?
-
很难在不了解您如何定义数据结构的情况下提出建议。但这是一个更大的话题。对指针和内存的基本理解是您在第一个“hello world”程序之后几乎需要立即学习的内容。这个问题更多地是关于“我如何用 C 编程”而不是“我如何解决我的问题”。
-
我很少使用指针;我仍在学习和试验它们。我已经添加了正在使用的结构。
-
为了便于我们人类阅读和理解:1) 一致缩进,在每个左大括号'{'后缩进。在每个右大括号 '}' 之前取消缩进。切勿使用制表符进行缩进。建议每个缩进级别为 4 个空格,因为即使使用可变宽度字体也是如此。 2) 通过空行分隔代码块(for、if、else、while、do...while、switch、case、default)。 3) 包括
#include语句,这样我们就不必猜测了。