Programexempel från Progmet-föreläsning 4, onsdag 9 september 2009 ================================================================== namn.c (hann vi inte med på fö 3 2009...) ------ // namn.c #include #include #include int main(void) { char* namn; int langd; printf("Ange längden på namnet (avsluta med 0): "); scanf("%d", &langd); /* Och kolla om scanf gick bra... */ while (getchar() != '\n') ; while (langd > 0) { namn = malloc(langd + 1 + 1); /* \n och \0 */ /* Och kolla om malloc gick bra... */ printf("Ange namnet: "); /* Undvik: gets(namn); */ fgets(namn, langd + 1 + 1, stdin); namn[strlen(namn) - 1] = '\0'; /* Men, om man ska vara noga... */ for (int i = 0; i < langd; ++i) { if (namn[i] == ' ') putchar('\n'); else putchar(namn[i]); } putchar('\n'); free(namn); printf("Ange längden på namnet (avsluta med 0): "); scanf("%d", &langd); while (getchar() != '\n') ; } return 0; } baklanges-5.c (med länkade lista) ------------- // baklanges-5.c #include #include struct talpost { double talet; struct talpost* next; }; int main(void) { FILE *tsin; FILE *tsut; struct talpost* first = NULL; struct talpost* this; int antal; int i; tsin = fopen("reella-tal.txt", "r"); fscanf(tsin, "%d", &antal); for (i = 0; i < antal; ++i) { struct talpost* new; new = malloc(sizeof(struct talpost)); fscanf(tsin, "%lf", &new->talet); new->next = first; first = new; } fclose(tsin); tsut = fopen("ny-fil.txt", "w"); fprintf(tsut, "%d\n", antal); this = first; while (this != NULL) { fprintf(tsut, "%f\n", this->talet); this = this->next; } fclose(tsut); /* Hm... */ this = first; while (this != NULL) { free(this); this = this->next; } return 0; } baklanges-6.c (med avallokering av den länkade listan) ------------- // baklanges-6.c #include #include struct talpost { double talet; struct talpost* next; }; int main(void) { FILE *tsin; FILE *tsut; struct talpost* first = NULL; struct talpost* this; int antal; int i; tsin = fopen("reella-tal.txt", "r"); fscanf(tsin, "%d", &antal); for (i = 0; i < antal; ++i) { struct talpost* new; new = malloc(sizeof(struct talpost)); fscanf(tsin, "%lf", &new->talet); new->next = first; first = new; } fclose(tsin); tsut = fopen("ny-fil.txt", "w"); fprintf(tsut, "%d\n", antal); this = first; while (this != NULL) { fprintf(tsut, "%f\n", this->talet); this = this->next; } fclose(tsut); this = first; while (this != NULL) { struct talpost* to_be_freed = this; this = this->next; free(to_be_freed); } return 0; }