Přednáška http://efis.tul.cz/~dana.nejedlova/ Základy programování, Programování I a II Přednáška z jazyka C Probralo se to do snímku "Inicializace struktur". Cvičení Funkce pro čtení řetězce #include #include #include #define MAX_DELKA_RIDICIHO_RETEZCE_FORMATU 1000 #define MAX_DELKA_RETEZCE 10 int zadej_cele_cislo(char *propmt) { int cislo; printf("%s", propmt); while (scanf("%d", &cislo) != 1) { printf("Zadali jste cislo spatne.\n"); printf("Zadejte cislo znovu: "); while (getchar() != '\n') ; } while (getchar() != '\n') ; return cislo; } void zadej_retezec_rrf(char *propmt, char *retezec) { char rrf[MAX_DELKA_RIDICIHO_RETEZCE_FORMATU]; printf("%s", propmt); sprintf(rrf, "%%%ds", MAX_DELKA_RETEZCE - 1); scanf(rrf, retezec); while (getchar() != '\n') ; } void zadej_retezec_fgets(char *propmt, char *retezec) { int delka; printf("%s", propmt); fgets(retezec, MAX_DELKA_RETEZCE, stdin); delka = strlen(retezec) - 1; if (retezec[delka] == '\n') retezec[delka] = '\0'; else while (getchar() != '\n') ; } char *zadej_retezec_local_static_array(char *propmt) { char retezec[MAX_DELKA_RETEZCE]; // warning: function returns address of local variable int delka; printf("%s", propmt); fgets(retezec, MAX_DELKA_RETEZCE, stdin); delka = strlen(retezec) - 1; if (retezec[delka] == '\n') // Retezec "abc\n" ma indexy "0123" a strlen("abc\n") = 4. retezec[delka] = '\0'; else while (getchar() != '\n') ; return retezec; } char *zadej_retezec_dynamically_allocated_array(char *propmt) { char *retezec; int delka; printf("%s", propmt); retezec = (char *) calloc(MAX_DELKA_RETEZCE, sizeof(char)); fgets(retezec, MAX_DELKA_RETEZCE, stdin); delka = strlen(retezec) - 1; if (retezec[delka] == '\n') retezec[delka] = '\0'; else while (getchar() != '\n') ; return retezec; } int main(void) { int cislo; cislo = zadej_cele_cislo("Zadej cele cislo: "); printf("Bylo zadano cislo %d.\n", cislo); char retezec[MAX_DELKA_RETEZCE]; char *retezec_bez_kapacity; zadej_retezec_rrf("Zadej retezec: ", retezec); printf("Byl zadan retezec '%s'.\n", retezec); zadej_retezec_rrf("Zadej retezec: ", retezec); printf("Byl zadan retezec '%s'.\n", retezec); zadej_retezec_fgets("Zadej retezec: ", retezec); printf("Byl zadan retezec '%s'.\n", retezec); retezec_bez_kapacity = zadej_retezec_local_static_array("Zadej retezec: "); printf("Byl zadan retezec '%s'.\n", retezec_bez_kapacity); retezec_bez_kapacity = zadej_retezec_dynamically_allocated_array("Zadej retezec: "); printf("Byl zadan retezec '%s'.\n", retezec_bez_kapacity); free((void *) retezec_bez_kapacity); retezec_bez_kapacity = zadej_retezec_dynamically_allocated_array("Zadej retezec: "); printf("Byl zadan retezec '%s'.\n", retezec_bez_kapacity); free((void *) retezec_bez_kapacity); return 0; }