Еще одна попытка во второй части вопроса: разделить строку на несколько строк, вы можете использовать strchr, чтобы пройти по ней, как указано в bta, и в каждом разделителе вставить символ конца строки ('\ 0') и разбить строку на месте, используя указатели для ссылки на начало каждого сегмента.
#include <stdio.h>
#include <string.h>
int main(void) {
/* may be read from input, initialized with value for simplicity */
char a[] = "8;9;10;12";
char *b, *c, *d;
/*use strchr to get the index of ';' and replace it with and end of string
increment b to move it to the start of the next string */
b = strchr(a, ';');
*b = '\0';
b++;
c = strchr(b, ';');
*c = '\0';
c++;
d = strchr(c, ';');
*d = '\0';
d++;
printf("a: %s, b: %s, c: %s, d:%s", a, b, c, d);
}
Очевидно, что это было бы лучше сделать с массивом строк и циклом, поэтому вы не ограничены четырьмя строками, разделенными точкой с запятой, но, надеюсь, это даст вам представление.
Если вы хотите быстро и грязно напечатать 3-ю строку текста ввода, вы можете просто использовать 3 оператора fgets.
#include <stdio.h>
int main(void) {
char buf[256];
fgets(buf, 256, stdin);
fgets(buf, 256, stdin);
fgets(buf, 256, stdin);
printf("%s", buf);
}