Code:
#include <stdio.h>
#include <stdlib.h>
//#include <crtdbg.h> // do not remove
#define FLUSH while (getchar() != '\n')
#define MEM_ERROR printf("Not enough memory!\n")
// Prototype Declarations
double getNum(void);
double insertionSort(double *ptr, int counter);
int main (void)
{
//Local Definitions
double *ptr;
double **pptr;
int counter;
int i;
double number;
double* p_walker;
// Statements
printf("\t\t Homework 3 - Pointer Applications:\n"
"\t\t Insertion Sort and Pointers\n\n" );
if(!(pptr = malloc(1000 * sizeof (*pptr)))){
printf("Not enough memory available.\n"); // no memory available
exit(100);
}
if(!(ptr = malloc(1000 * sizeof ( *ptr )))){
printf("Not enough memory available.\n"); // no memory available
exit(100);
}
printf("\nPlease enter numbers and enter -1 when you are done: ");
number = getNum();
p_walker = ptr;
while(number!= -1){
p_walker = &number; pptr[counter] = p_walker;
printf("entered1: %lg \n", number);
printf("entered: %lg \n", *p_walker);
number = getNum();
p_walker++;
counter++;
}
printf("endpointer = %ld startPointer = %ld Counter = %d\n", p_walker, ptr, counter);
for (i = 0; i < counter; i++) {
//printf("%lg\t",*(ptr+i));
printf("%lg\t", *(*pptr + i));
}
ptr = realloc(ptr, counter * sizeof(double));
if( ptr == NULL )
MEM_ERROR;
else
ptr = ptr;
insertionSort(ptr, counter);
// printf( _CrtDumpMemoryLeaks() ? "Memory Leak\n" : "No Memory Leak\n"); // do not remove
printf("\n\t\tEnd of Program\n"
"\n\t\tHave a great day!\n");
return 0;
}
/************************************************
Prompt the user to enter a valid integer number
Pre: nothing
Post: returns a valid integer
*/
double getNum(void)
{
double num;
while (scanf("%lg", &num) != 1)
{
// scanf returns 1 if number read corrrectly
FLUSH; // to "consume" the invalid input
printf("-*- Invalid number. Please re-enter: ");
} // while
return num;
}
double insertionSort(double *ptr, int counter)
{
int i, j;
double temp;
for(i = 1; i < counter; i++)
{
temp = ptr[i];
j = i - 1;
while(temp < ptr[j] && j >= 0)
{
ptr[j + 1] = ptr[j];
j = j - 1;
}
ptr[j + 1] = temp;
}
printf("\n The ascending order of the list is: \n");
for (i = 0; i < counter; i++)
{
printf("\n%d", ptr[i]);
}
}
-Hope this version turns out better. It tends to get messed up when I email it to myself through Unix.
Crap, no luck. Sorry.