この巨大な循環バッファをどのように出力するのだろうかと思っています。最初の 3 つのブロックは構造体であり、while ループはメインにあります。これは私のコードの一部にすぎません。私は今、フォーマットや出力に焦点を当てていません。これは、私が何を得るべきかという単なるアイデアです。この行は、私が焦点を当てている場所です:
// copies from and to destination of the string of the timestamp and the value.
strcpy(chart.buffer[asci].reading[chart.buffer[asci].end].timestamp,
current.field[1]);
私の入力は次のとおりです。
5, 08:00:00, 2, 60 5、08:00:01、5、15 5, 08:00:10, 1, 986 5, 08:05:24, 2, 61 5, 08:07:21, 2, 58 5、08:10:11、6、0
私の出力は次のようになります。
患者 ID = 5 の測定値は次のとおりです。 温度: 08:00:10: 98.6 心拍数: 08:00:00: 60 08:05:24:61 08:07:21:58 収縮期血圧 拡張期血圧 呼吸数 08:00:11:15
/*
* Health Monitoring System
*/
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#define MAXPATIENTS 5
#define MAXREADINGS 10
#define MAXTYPES 5
#define MAXTIME 8
/* One health type reading: timestamp + actual value */
typedef struct{
char timestamp[MAXTIME+1];
int value;
}Element;
/* Circular buffer of health type readings */
typedef struct{
int start; /* index of oldest reading */
int end; /* index of most current reading */
Element reading[MAXREADINGS];
}CircularBuffer;
/* Patient's health chart: ID + multiple health type readings */
typedef struct{
int id;
CircularBuffer buffer[MAXTYPES];
}Chart;
/*
* Health records for all patients defined here.
* The variable record is visible to all functions
* in this file, i.e. it is global.
*/
Chart record[MAXPATIENTS];
typedef enum{false,true} bool;
typedef char f_string[30] ;
typedef struct{
int nfields ;
f_string field[30] ;
}health_line;
bool is_end_of_field(char ch){
return (ch == ',') || (ch == '\n') || (ch == EOF);
}
int min(int x, int y){
return x < y ? x : y;
}
//read the next field from standard input
int get_field(f_string field){
int nextIndex;
int next_char;
next_char = getchar();
for(nextIndex = 0; ! is_end_of_field(next_char); nextIndex++){
field[nextIndex] = next_char;
next_char = getchar();
}
field[nextIndex] = '\0';
return next_char;
}
// reads in a csv line and fields is filled with data
health_line get_line(){
health_line line;
int currentChar = 0;
int lastChar;
lastChar = get_field(line.field[currentChar++]);
while(lastChar == ','){
lastChar = get_field(line.field[currentChar++]);
}
line.nfields = (lastChar == EOF) ? 0: currentChar;
return line;
}
void print_health(health_line data){
int i =0;
for(i = 0; i <data.nfields; i++){
printf("%s \n", data.field[i]);
}
}
void print_line(health_line data){
int type = atoi(data.field[2]);
double tempType = atoi(data.field[3]);
int patientID = atoi(data.field[0]);
int value = atoi(data.field[3]);
if(type == 1){
tempType = tempType/10.0;
printf("%s Temperature for Patient ID = %d is %.1f \n",data.field[1],patientID,tempType );
}
else if(type == 2){
printf("%s Heart Rate for Patient ID = %d is %d \n",data.field[1],patientID,value );
}
else if(type == 3){
printf("%s Systolic Pressure for Patient ID = %d is %d \n",data.field[1],patientID,value );
}
else if(type == 4){
printf("%s Diastolic Pressure for Patient ID = %d is %d \n",data.field[1],patientID,value );
}
else if(type == 5){
printf("%s Respiration Rate for Patient ID = %d is %d \n",data.field[1],patientID, value );
}
else if(type == 6){
printf("%s Print command entered for Patient ID = %d \n", data.field[1], patientID);
}
}
void main(health_line data){
int i, j;
/* 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");
/*
* YOUR CODE GOES HERE:
* (1) Read a csv line of health data from stdin
* (2) Parse csv line into appropriate fields
* (3) Store health data in patient record or print if requested
* (4) Continue (1)-(3) until EOF
*
*/
health_line arrayTotal[30];
health_line current;
current = get_line();
arrayTotal[0] = current;
int k = 0;
int Index = 0;
int printValue = atoi(data.field[2]);
health_line temp;
int asci;
asci = atoi(current.field[2]);
int printAsci;
printAsci = atoi(current.field[2]);
double tempValue = 0.0;
tempValue = atof(current.field[3]);
int patientID;
Chart chart;
int valueType;
//stores the current line read in to a temp array
while(asci != 6){
current = get_line();
asci = atoi(current.field[2]);
patientID = atoi(current.field[0]);
arrayTotal[asci - 1] = current;
//copies from and to destination of the string of the timestamp and the value.
strcpy(chart.buffer[asci].reading[chart.buffer[asci].end].timestamp, current.field[1]);
//why is this line giving me seg fault
// chart.buffer[asci].reading[chart.buffer[asci].end].value = atoi(current.field[3]);
if(chart.buffer[asci].start == chart.buffer[asci].end){
chart.buffer[asci].start++;
}
chart.buffer[asci].end++;
}
printf("\nReading for Patient ID = %d\n",patientID);
//attempt to print out the result of the strcpy
//printf("%s",chart.buffer[asci]);
/*
//checks the second field within an array to compare it to a condition to print out a certain string for a category
int p;
int l;
for(p = 0; p < 8; p++){
health_line temp;
temp = arrayTotal[p];
int type;
type = atoi(temp.field[2]);
if(type == 1){
printf("Temperature:\n%s: %.1f\n",temp.field[1],tempValue/10.0);
}
else if(type == 2){
printf("Heart Rate:\n%s: %s\n", temp.field[1],temp.field[3]);
}
else if(type == 3){
printf("Systolic Pressure:\n%s %s\n", temp.field[1],temp.field[3]);
}
else if(type == 4){
printf("Diastolic Pressure:\n%s: %s\n", temp.field[1], temp.field[3]);
}
else if(type == 5){
printf("Respiration Rate:\n%s: %s\n", temp.field[1], temp.field[3]);
}
}*/
}