#include #include // need for *alloc // much easier to always use typedef when defining structs: typedef struct { int n1, n2, n3; } SSN; // SSN is new type name char *ssnString(SSN s); int main(void) { SSN *n1p, person; person.n2 = 54; n1p = malloc(sizeof(SSN)); // works without typecast n1p->n1 = 100; n1p->n2 = 40; n1p->n3 = 50; printf("%03d-%2.2d-%04d\n", n1p->n1, n1p->n2, n1p->n3); puts(ssnString(*n1p)); printf("enter SSN in form ###-##-####\n"); scanf("%d-%d-%d", &n1p->n1, &n1p->n2, &(n1p->n3)); puts(ssnString(*n1p)); printf("enter SSN in 3 integer parts: "); scanf("%d %d %d", &person.n1, &person.n2, &person.n3); printf("%03d-%02d-%04d\n", person.n1, person.n2, person.n3); int red; printf("enter SSN as ###-##-#### "); red = scanf("%3d-%2d-%4d", &person.n1, &person.n2, &person.n3); printf("\nred %d values\n", red); printf("%03d-%02d-%04d\n", person.n1, person.n2, person.n3); char word[20]; printf("enter word: "); scanf("%s", word); printf("word was: %s\n", word); return 0; } char *ssnString(SSN ssn) { // char st[] = calloc(5, sizeof(char)); // ERROR - must use pointer notation // memory leak char *s = calloc(12, sizeof(char)); // might need typecast (char *) sprintf(s, "%03d-%02d-%04d", ssn.n1, ssn.n2, ssn.n3); /* s[3] = '-'; s[6] = '-'; s[11] = '\0'; s[0] = (char) (ssn.n1 / 100 + '0'); s[1] = (char) (ssn.n1 / 10 % 10 + '0'); s[2] = (char) (ssn.n1 % 10 + '0'); s[4] = (char) (ssn.n2 / 10 + '0'); s[5] = (char) (ssn.n2 % 10 + '0'); s[7] = (char) (ssn.n3 / 1000 + '0'); s[8] = (char) (ssn.n3 / 100 % 100 + '0'); s[9] = (char) (ssn.n3 / 10 % 10 + '0'); s[10] = (char) (ssn.n3 % 10 + '0'); */ return s; }