/** * gcc -DUSEB=1 weather.c to compile/run using parseB **/ #include #include #include #define WFILE "temps.txt" typedef struct { char time[10]; int temp; int dewPoint; int relHum; char windDir[10]; int windSpeed; } WeatherData; WeatherData weather[100]; void wprinter(WeatherData* w) { printf("Time:%s Temp:%d F\n", w->time, w->temp); } void parseA(char* line, WeatherData w) { //printf("WaP %d\n", &w); char* c = strtok(line, " \t"); strcpy(w.time, c); strtok(NULL, " \t"); // AM / PM skipped c = strtok(NULL, " \t"); w.temp = (int)strtol(c, NULL, 10); c = strtok(NULL, " \t"); c = strtok(NULL, " \t"); w.dewPoint = (int)strtol(c, NULL, 10); c = strtok(NULL, " \t"); c = strtok(NULL, " \t"); w.relHum = (int)strtol(c, NULL, 10); c = strtok(NULL, " \t"); strcpy(w.windDir, c); c = strtok(NULL, " \t"); c = strtok(NULL, " \t"); w.windSpeed = (int)strtol(c, NULL, 10); wprinter(&w); } WeatherData parseB(char* line) { WeatherData w; char* c = strtok(line, " \t"); strcpy(w.time, c); strtok(NULL, " \t"); // AM / PM skipped c = strtok(NULL, " \t"); w.temp = (int)strtol(c, NULL, 10); c = strtok(NULL, " \t"); c = strtok(NULL, " \t"); w.dewPoint = (int)strtol(c, NULL, 10); c = strtok(NULL, " \t"); c = strtok(NULL, " \t"); w.relHum = (int)strtol(c, NULL, 10); c = strtok(NULL, " \t"); strcpy(w.windDir, c); c = strtok(NULL, " \t"); c = strtok(NULL, " \t"); w.windSpeed = (int)strtol(c, NULL, 10); //printf("WbP %d\n", &w); return w; } int main(void) { #ifdef USEB printf("BBBBBBBBBBBBBBBBB\n"); #else printf("AAAAAAAAAAAAAAAAA\n"); #endif char line[256]; FILE* f = fopen(WFILE, "r"); if (f==NULL) { fprintf(stderr, "Could not open %s -- quitting\n", WFILE); return 1; } int c = 0; while (NULL != fgets(line, 256, f)) { //printf("%s", line); #ifndef USEB //printf("WaaP %d\n", &weather[c]); parseA(line, weather[c]); #else WeatherData w = parseB(line); //printf("WbbP %d\n", &w); weather[c] = w; #endif c++; } for (int i=0; i