fscanf <STDIO.H>
scanf <STDIO.H>
Składnia:
      int fscanf (FILE *stream, const char *format [, adres, ...]);
      int scanf  (              const char *format [, adres, ...]);

gdzie:
stream - wskaźnik do strumienia, z którego wczytujemy dane.
format - łańcuch formatujący wczytywane dane.
adres - referencja do 1 lub więcej zmiennych, w których mają być umieszczone wczytane i sformatowane zgodnie z kodem podanym w parametrze format dane.

Opis
fscanf wczytuje ze strumienia ciąg znaków, formatuje go zgodnie z kodami podanymi w format i przypisuje do zmiennych, których adresy przekazaliśmy w liście.
scanf wczytuje ze standardowego strumienia wejściowego stdin ciąg znaków, formatuje go zgodnie z kodami podanymi w format i przypisuje do zmiennych, których adresy przekazaliśmy w liście.
Funkcje akceptują zmienną ilość parametrów. Pierwszy kod formatujący jest używany dla pierwszego argumentu, drugi dla drugiego, itd.
Jeżeli podamy więcej argumentów niż kodów formatujących, to dodatkowe argumenty są ignorowane.
Jeżeli podamy mniej argumentów niż kodów formatujących, to wynik działania funkcji będzie przypadkowy.
Wczytywanie kolejnego pola kończy się po napotkaniu: znaku Enter, spacji, znaku tabulacji, 1-szego znaku, którego nie można poprawnie zinterpretować lub po wczytaniu podanej w formacie ilości znaków.

Zwracana wartość:

  • powodzenie - ilość poprawnie wczytanych, sformatowanych i zachowanych pól;
  • błąd - zero lub znacznik końca pliku (EOF).
Specyfikacja formatu:
  % [*] [szerokość] [h|l|L] typ
Każda specyfikacja musi zaczynać się od znaku % i zawierać co najmniej typ. Pozostałe pola specyfikacji formatu są opcjonalne. Wszystkie pola formatu mają stałą pozycję w łańcuchu formatującym: można je opuścić, ale jeżeli występują, to muszą być podane w kolejności takiej, jak w powyższym zapisie.
Pole Opis
* Znaki są odczytywane zgodnie z formatem, ale nie są zapamiętywane. Dla takiej specyfikacji nie ma potrzeby podawania zmiennej, w której ma on być umieszczony. Pole używane do odczytania danych z pliku z pominięciem niektórych informacji.
szerokość Maksymalna ilość znaków, która ma być odczytana dla wyliczenia wartości zmiennej.
h|l|L Modyfikacja domyślnych wartości dla pola typ:
h - podajemy dla typów całkowitych (d, i, o, u, x, X), aby zaznaczyć, że parametr jest liczbą typu short int
l - podajemy dla typów całkowitych (d, i, o, u, x, X), aby zaznaczyć, że parametr jest liczbą typu long int
L - podajemy dla typów rzeczywistych (e, E, f, g, G), aby zaznaczyć, że parametr jest liczbą typu long double
typ Typ konwersji argumentu:
  • Liczby:
  • d - całkowita liczba dziesiętna ze znakiem (int *arg)
  • D - całkowita liczba dziesiętna ze znakiem (long *arg)
  • i - całkowita liczba dziesiętna ze znakiem (int *arg)
  • I - całkowita liczba dziesiętna ze znakiem (long *arg)
  • u - całkowita liczba dziesiętna bez znaku (unsigned int *arg)
  • U - całkowita liczba dziesiętna bez znaku (unsigned long *arg)
  • o - całkowita liczba ósemkowa bez znaku (int *arg)
  • O - całkowita liczba dziesiętna ze znakiem (long *arg)
  • x - całkowita liczba szesnastkowa (int *arg)
  • X - całkowita liczba szesnastkowa (int *arg)
  • f - liczba rzeczywista ze znakiem (float *arg)
  • e - liczba rzeczywista ze znakiem (float *arg)
  • E - liczba rzeczywista ze znakiem (float *arg)
  • g - liczba rzeczywista ze znakiem (float *arg)
  • G - liczba rzeczywista ze znakiem (float *arg)
  • Znaki:
  • c - pojedynczy znak (char *arg)
  • s - wskaźnik do tablicy znaków (char arg[])
  • % - bez konwersji: znak %

Przykład fscanf:

#include <stdio.h>

int main(void)
{ int i;

  printf("Podaj dowolną liczbę całkowitą: ");

  if (fscanf(stdin, "%d", &i))             //wczytanie liczby
      printf("Liczba wczytana poprawnie: %i\n", i);
  else
      fprintf(stderr, "Błąd wczytania liczby całkowitej.\n");
  return 0;
}

Przykład scanf:

#include <stdio.h>

int main(void)
{ char   tekst [ 50 ];
  int    c;
  long   c_long;
  float  f;
  long double f_long;

  printf("Podaj dowolny tekst do 50 znaków: ");
  scanf("%50s", &tekst);   // wczytywanie tekstu
  fflush(stdin);  // wyczyszczenie z ewentualnych błędów
  printf("\nPodałeś: %s\n", tekst);

  printf("\nPodaj 2 liczby całkowite: ");
  scanf("%d %D", &c, &c_long);   // wczytywanie liczb całkowitych
  fflush(stdin);  // wyczyszczenie z ewentualnych błędów
  printf("\nPodałeś: %d i &ld\n", c, c_long);

  printf("\nPodaj 2 liczby rzeczywiste: ");
  scanf("%f %Lf", &f, &f_long);   // wczytywanie liczb rzeczywistych
  fflush(stdin);  // wyczyszczenie z ewentualnych błędów
  printf("\nPodałeś: %f i &Lf\n", f, f_long);

  printf("\nPodaj nazwisko: ");
  scanf("%[A-Za-z]", &tekst);   // ograniczenie wczytywania do liter
  fflush(stdin);  // wyczyszczenie z ewentualnych błędów
  printf("\nPodałeś: %s\n", tekst);

  return 0;
}