Czy puts oraz gets można zastąpić za pomocą printf i scanf?
Ostatnie pytanie
można, interesując się detalami
Można, a gets
to nawet trzeba, bo użycie tej funkcji to błąd.
gets (idealnie nie jest, bo jest warunek brzegowy, który nie działa poprawnie):
char s[256];
scanf("%255[^\n]%*1[\n]", s);
puts
printf("%s\n", s);
Bezwzględnie nie powinno się używać funkcji gets
(brak możliwości określenia rozmiaru bufora, czyli prosimy się o przepełnienie). Należy używać fgets
zamiast niej, można użyć też scanf
, w zależności od tego co chcesz osiągnąć, bo musisz wiedzieć, że stosują one dwa zupełnie odrębne podejścia do czytania plików. fgets
służy do odczytania jednej linijki, scanf
w ogóle olewa różnice między białymi znakami, jeśli masz scanf
napisany na 3 liczby, to nie ma znaczenia czy zostaną wpisane w jednej linice, w oddzielnych, czy będą oddzielone pustymi liniami. Trzeba mieć to na uwadze, zwłaszcza jeśli chcesz używać obu funkcji na tym samym strumieniu. Oczywiście głównym wskazaniem do używania scanf
jest wczytywanie liczb. Czasem może się okazać zasadne połączenie
Analogicznie sytuacja wygląda z puts
i printf
, podobnie odzwierciedlają dwa podejścia do wypisywania danych. Jeśli chcemy wypisywać liczby lub kilka zmiennych w jednej linijce, używamy printf
, jeśli chcemy wypisać jeden łańcuch, używamy puts
. Jeśli chcemy coś wypisać, bez znaku nowej linii na końcu, też należy użyć printf
. Tutaj problem z mieszaniem tych dwóch funkcji nie występuje.