Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- char* userNumbers = (char*)malloc(capacity * sizeof(char));
- char** realNumStr = (char**)malloc(capacity * sizeof(char*));
- double* realNumDouble = (double*)malloc(capacity * sizeof(double));
- double* realNumDoubleFinal = (double*)malloc(capacity * sizeof(double));
- if (userNumbers == NULL || realNumDouble == NULL || realNumDoubleFinal == NULL || realNumStr == NULL)
- {
- printf("insufficient Memory");
- exit(1);
- }
- //char userNumbers[1000] = { "" };
- char* contextString[1] = { "" };
- size_t size = 0;
- int counter = 0;
- int counter2 = 0;
- int finalARRAY = 0;
- //Title
- printf("Enter white-space separated real numbers. Terminate input with ^Zn");
- //User's input
- while (gets(userNumbers))
- //while (scanf_s("%s", userNumbers, 500) != 0)
- {
- size += strlen(userNumbers);
- while (size >= capacity)
- {
- capacity = size * 2;
- char * userNumbers2 = realloc(userNumbers, capacity * sizeof (char));
- char ** realNumStr2 = realloc(realNumStr, capacity * sizeof (char*));
- double * realNumDouble2 = realloc(realNumDouble, capacity * sizeof(double));
- double * realNumDoubleFinal2 = realloc(realNumDoubleFinal, capacity * sizeof(double));
- if (userNumbers2 == NULL || realNumDouble2 == NULL || realNumDoubleFinal2 == NULL || realNumStr2 == NULL)
- {
- free(userNumbers);
- free(realNumDouble);
- free(realNumDoubleFinal);
- free(realNumStr);
- printf("insufficient Memory");
- return NULL;
- }
- userNumbers = userNumbers2;
- realNumStr = realNumStr2;
- realNumDouble = realNumDouble2;
- realNumDoubleFinal = realNumDoubleFinal2;
- }
- counter = 0;
- //Splitting the char array and cloning it to a Double Array.
- char* split = strtok_s(userNumbers, " ", contextString);
- while (split != NULL)
- {
- realNumStr[counter] = split;
- realNumDouble[counter] = atof(split);
- split = strtok_s(NULL, " ", contextString);
- counter++;
- }
- //Error tests
- for(int i = 0; i < counter; ++i)
- {
- int dotCount = 0;
- counter2++;
- for (int j = 0; j < strlen(realNumStr[i]); ++j)
- {
- //Checking if there is more than one '.' on the line.
- if (realNumStr[i][j] == '.')
- {
- dotCount++;
- if (dotCount > 1)
- {
- failureElement(realNumStr, i, counter2);
- freeAll(userNumbers, realNumStr, realNumDoubleFinal, realNumDouble);
- return EXIT_FAILURE;
- }
- }
- //Making sure to read 0.
- else if ((realNumStr[i][j] == '0') || ((realNumStr[i][0] == '-' && realNumStr[i][1] == '0')))
- {
- break;
- }
- //Checking if it is a number.
- else if((realNumDouble[i] != 0))
- {
- for(int k = 1; k < strlen(realNumStr[i]); ++k)
- {
- //Handling '-' as a non valid input (--1, -1-).
- if ((realNumStr[i][k] == '-' || isalpha(realNumStr[i][k])))
- {
- failureElement(realNumStr, i, counter2);
- freeAll(userNumbers, realNumStr, realNumDoubleFinal, realNumDouble);
- return EXIT_FAILURE;
- }
- }
- }
- else
- {
- failureElement(realNumStr, i, counter2);
- freeAll(userNumbers, realNumStr, realNumDoubleFinal, realNumDouble);
- return EXIT_FAILURE;
- }
- }
- }
- //Final Double Array for the calculations.
- for (int j = 0; j < counter;++j)
- {
- realNumDoubleFinal[finalARRAY++] = realNumDouble[j];
- }
- };
- //Checking if data set is empty.
- if (userNumbers[0] == '