#include #include #include #define MAXLEN 100 #define FMT "%100s" struct sana { struct sana *seur; char sana[1]; }; int main(int argc, char **argv) { int pituus, lkm=0, i; char *tmpsana; struct sana *alku = NULL, *uusi; if (argc != 2 || 1 != sscanf(argv[1], "%d", &pituus)) { printf("Anna haluttu sanapituus argumenttina\n"); exit(EXIT_FAILURE); } if (!(tmpsana = malloc(MAXLEN+1))) { fprintf(stderr,"Muisti loppui\n"); exit(EXIT_FAILURE); } while (1 == scanf(FMT, tmpsana)) { if (strlen(tmpsana) == pituus) { #ifdef DEBUG printf("%s\n", tmpsana); #endif uusi = malloc(sizeof(struct sana) + pituus); if (!uusi) { fprintf(stderr,"Muisti loppui\n"); exit(EXIT_FAILURE); } strcpy(uusi->sana, tmpsana); uusi->seur = alku; alku = uusi; lkm++; } } printf("Yhteensä %d kpl %d-kirjaimisia sanoja\n", lkm, pituus); for (uusi=alku, i=lkm/2; uusi; uusi = uusi->seur) { if (!i--) printf("Keskimmäinen sana on \"%s\"\n", uusi->sana); } return 0; }