diff --git a/csci218/Assignments/BMI.c b/csci218/Assignments/BMI.c index a33b074..d10634e 100644 --- a/csci218/Assignments/BMI.c +++ b/csci218/Assignments/BMI.c @@ -1,9 +1,11 @@ #include +#include #include #include #include -void header(int width, int margin, char lineChar, char headerTitle[50], char inputMessage[500]); +void header(int width, int margin, char lineChar, char *headerTitle, char *inputMessage, int meslen); + int main(){ @@ -16,9 +18,10 @@ int main(){ // Char to store the gender with max length of 7 and a line string for formatting char gender[7]; + char message[] = "This program will calculate your BMI, Life Expectancy, and BSA(multiple methods) with just your weight(kg), height(cm), and gender."; // Display Program Purpose - header(80, 4, '*', "Purpose", "This program will calculate your BMI, Life Expectancy, and BSA(multiple methods) with just your weight(kg), height(cm), and gender."); + header(80, 4, '*', "Purpose", message, (int)strlen(message)); // Read in weight, height, and gender from user printf("Please enter your weight(kg): "); @@ -54,7 +57,7 @@ int main(){ scanf("%s", gender); // Loop through all chars in gender and convert to lower case - for (int i = 0; i < strlen(gender); i++) { + for (int i = 0; i < (int)strlen(gender); i++) { gender[i] = tolower(gender[i]); } @@ -106,15 +109,13 @@ int main(){ return 0; } -void header(int width, int margin, char lineChar, char headerTitle[50], char inputMessage[500]) { +void header(int width, int margin, char lineChar, char *headerTitle, char *inputMessage, int meslen) { int TITLE_MARGIN = 3; int CONTENT_MARGIN = margin; int rows = 1; - char message[500]; - strcpy(message, inputMessage); char line[width + 1]; char topLine[width + 1]; @@ -125,36 +126,53 @@ void header(int width, int margin, char lineChar, char headerTitle[50], char inp line[i] = lineChar; } - line[width + 1] = '\0'; + line[width] = 0; strcpy(topLine, line); // Add header title - for (int i = TITLE_MARGIN; i < (strlen(headerTitle) + TITLE_MARGIN); i++) { + for (int i = TITLE_MARGIN; i < ((int)strlen(headerTitle) + TITLE_MARGIN); i++) { topLine[i] = headerTitle[i - TITLE_MARGIN]; } - topLine[width + 1] = '\0'; + topLine[width] = 0; + + + char *message = (char *)malloc((meslen + 100) * sizeof(char)); + if (message == NULL) { + printf("Memory allocation failed!\n"); + exit(1); + } + + + strncpy(message, inputMessage, meslen + 100); - int rowCheck = 1; - char tempMessage[500]; while(1) { - if (message[(contentWidth * rows)] == '\0') { break; } + if ((contentWidth * rows) > (int)strlen(message)) { break; } if (message[(contentWidth * rows)] != ' ') { int i = 1; + int tempCounter = 0; while (1) { if (message[(contentWidth * rows) - i] == ' ') { int start = ((contentWidth * rows) - i) + 1; + char tempMessage[(int)strlen(message)]; int k = 0; + for (int j = 0; j < (int)strlen(message); j++) { + tempMessage[j] = ' '; + } for (int j = start; j < strlen(message); j++) { tempMessage[k] = message[j]; + tempCounter = k; k++; } for (int j = 0; j < i; j++) { message[start + j] = ' '; } - for (int j = 0; j < strlen(tempMessage); j++) { - message[(contentWidth * rows) + 1 + j] = tempMessage[j]; + for (int j = 0; j < tempCounter + 2; j++) { + message[(start + i) + j] = tempMessage[j]; + if (tempCounter + 1 == j) { + message[(start + i) + j] = 0; + } } break; } @@ -164,6 +182,7 @@ void header(int width, int margin, char lineChar, char headerTitle[50], char inp rows++; } + printf("%s\n", topLine); for (int i = 0; i < rows; i++) { @@ -174,7 +193,7 @@ void header(int width, int margin, char lineChar, char headerTitle[50], char inp } for (int j = 0; j < contentWidth; j++) { if (charCount == 0 && (message[j + (i * contentWidth)] == ' ')) {j++;} - if (j + (i * contentWidth) == (int)strlen(message)) { + if (!(message[j + (i * contentWidth)])) { break; } printf("%c", message[j + (i * contentWidth)]); @@ -190,4 +209,6 @@ void header(int width, int margin, char lineChar, char headerTitle[50], char inp } printf("%s\n", line); + + free(message); } diff --git a/csci218/header.c b/csci218/header.c index c2a97cb..329c262 100644 --- a/csci218/header.c +++ b/csci218/header.c @@ -1,18 +1,18 @@ #include +#include #include -void header(int width, int margin, char lineChar, char *headerTitle, char *message); +void header(int width, int margin, char lineChar, char *headerTitle, char *inputMessage, int meslen); int main() { char message[] = "Testing this out some more. okay i think its working now DHOWEIFH HDSOIHTOHNDS HSODUIHT. This program will calculate your life expecantacy and bmi and BSA by just your weight(kg), height(cm), and gender."; - printf("%d\n", (int)strlen(message)); - header(80, 4, '*', "Purpose", message); + header(80, 4, '*', "Purpose", message, (int)strlen(message)); return 0; } -void header(int width, int margin, char lineChar, char *headerTitle, char *message) { +void header(int width, int margin, char lineChar, char *headerTitle, char *inputMessage, int meslen) { int TITLE_MARGIN = 3; int CONTENT_MARGIN = margin; @@ -29,34 +29,36 @@ void header(int width, int margin, char lineChar, char *headerTitle, char *messa line[i] = lineChar; } - line[width + 1] = '\0'; + line[width] = 0; strcpy(topLine, line); // Add header title - for (int i = TITLE_MARGIN; i < (strlen(headerTitle) + TITLE_MARGIN); i++) { + for (int i = TITLE_MARGIN; i < ((int)strlen(headerTitle) + TITLE_MARGIN); i++) { topLine[i] = headerTitle[i - TITLE_MARGIN]; } - topLine[width + 1] = '\0'; + topLine[width] = 0; - printf("%d\n", (int)strlen(message)); - int rowCheck = 1; + char *message = (char *)malloc((meslen + 100) * sizeof(char)); + if (message == NULL) { + printf("Memory allocation failed!\n"); + exit(1); + } + + + strncpy(message, inputMessage, meslen + 100); + while(1) { - printf("%d > %d = %d\n", contentWidth * rows, (int)strlen(message), (contentWidth * rows) > (int)strlen(message)); if ((contentWidth * rows) > (int)strlen(message)) { break; } if (message[(contentWidth * rows)] != ' ') { int i = 1; int tempCounter = 0; while (1) { - printf("previous char = %c\n", message[(contentWidth * rows) - i]); if (message[(contentWidth * rows) - i] == ' ') { int start = ((contentWidth * rows) - i) + 1; char tempMessage[(int)strlen(message)]; - printf("check char = %c\n", message[contentWidth * rows]); - printf("start = %d\n", start); - printf("char after start = %c\n", message[start]); int k = 0; for (int j = 0; j < (int)strlen(message); j++) { tempMessage[j] = ' '; @@ -83,8 +85,6 @@ void header(int width, int margin, char lineChar, char *headerTitle, char *messa rows++; } - printf("%c\n", message[230]); - printf("%s\n",message); printf("%s\n", topLine); @@ -112,4 +112,6 @@ void header(int width, int margin, char lineChar, char *headerTitle, char *messa } printf("%s\n", line); + + free(message); }