Activity 27.7.
Here is a function which reads an arbitrarily long integer from the user input and stores it in a linked list of digits.
Compile and run the code below in your own C environment.
#include <stdio.h>
#include <stdlib.h>
struct digit {
int num;
struct digit *next;
};
typedef struct digit digit_t;
digit_t *createDigit(int);
void append(digit_t * start, digit_t * newDigptr);
void printNumber(digit_t *start);
void freeNumber(digit_t *start);
digit_t *readNumber(void);
int main(void) {
digit_t *start;
printf("Please enter a number: ");
start = readNumber();
printf("You entered: ");
/* print the number */
printNumber(start);
/* free all allocted space */
freeNumber(start);
return 0;
}
digit_t *createDigit(int dig) {
digit_t *ptr;
ptr = (digit_t *) malloc(sizeof(digit_t));
ptr->num = dig;
ptr->next = NULL;
return(ptr);
}
void append(digit_t * start, digit_t * newDigptr) {
digit_t *end = start;
while(end->next != NULL) {
end = end->next;
}
end->next = newDigptr;
}
void printNumber(digit_t *start) {
digit_t * ptr = start;
while (ptr!=NULL) {
printf("%d", ptr->num);
ptr = ptr->next;
}
printf("\n");
}
void freeNumber(digit_t *start) {
struct digit * ptr = start;
struct digit * tmp;
while (ptr!=NULL) {
tmp = ptr->next;
free(ptr);
ptr = tmp;
}
}
digit_t *readNumber(void) {
char c;
int d;
struct digit *start, *newptr;
start = NULL;
scanf("%c", &c);
while (c != '\n') {
d = c-48;
newptr = createDigit(d);
if (start == NULL) {
start = newptr;
} else {
append(start, newptr);
}
scanf("%c", &c);
}
return(start);
}

