W języku C, skanf() funkcja służy do odczytywania sformatowanych danych wejściowych ze standardowego wejścia. Zwraca całą liczbę zapisanych w nim znaków, w przeciwnym razie zwraca wartość ujemną.
Składnia:
int scanf(const char *characters_set)>
Złożoność czasowa: NA)
Przestrzeń pomocnicza: O(n) gdzie n jest długością sygnału wejściowego.
Wielu z nas zna tradycyjne zastosowania scanf. Cóż, oto kilka mniej znanych faktów
ciąg Java do tablicy
Jak odczytać tylko część potrzebnych nam danych wejściowych?
Rozważmy na przykład strumień wejściowy zawierający tylko znaki, po których następuje liczba całkowita lub zmiennoprzecinkowa. Musimy przeskanować tylko tę liczbę całkowitą lub zmiennoprzecinkową.
Przykład:
Input : 'this is the value 100', Output : value read is 100 Input : 'this is the value 21.2', Output : value read is 21.2>C
// C program to demonstrate that // we can ignore some string // in scanf() #include int main() { int a; scanf('This is the value %d', &a); printf('Input value read : a = %d', a); return 0; } // Input : This is the value 100>
Załóżmy teraz, że nie wiemy, jakie są poprzedzające znaki, ale na pewno wiemy, że ostatnia wartość jest liczbą całkowitą. Jak możemy przeskanować ostatnią wartość jako liczbę całkowitą?
Poniższe rozwiązanie działa tylko wtedy, gdy ciąg wejściowy nie zawiera spacji. Na przykład,
Wejście
'blablabla 25'>C
// C program to demonstrate use of *s #include int main() { int a; scanf('%*s %d', &a); printf('Input value read : a=%d', a); return 0; }> Wyjście
Input Value read : 25>
Wyjaśnienie : %*s w scanf służy do ignorowania niektórych danych wejściowych, jeśli jest to wymagane. W tym przypadku ignoruje dane wejściowe aż do następnej spacji lub nowej linii. Podobnie, jeśli napiszesz %*d, liczby całkowite będą ignorowane aż do następnej spacji lub nowej linii.
Ogólne zastosowanie scanf( ):
C // C program to demonstrate general use of scanf() #include int main() { int a; scanf('%d', &a); printf('a = %d', a); return 0; }> Wejście
2>
Wyjście
a = 2>
Powyższy fakt na pierwszy rzut oka może nie wydawać się przydatnym trikiem. Aby zrozumieć jego użycie, przyjrzyjmy się najpierw fscanf().
Funkcja fscanf w C
Masz dość niezdarnej składni czytania z plików? Cóż, fscanf przychodzi na ratunek. Funkcja ta służy do odczytania sformatowanego wejścia z danego strumienia w języku C.
Składnia:
przykład podciągu w Javie
int fscanf(FILE *ptr, const char *format, ...)>
fscanf czyta z pliku wskazanego przez wskaźnik FILE (ptr), zamiast czytać ze strumienia wejściowego.
Wartość zwracana: W przypadku niepowodzenia zwraca zero lub EOF. W przeciwnym razie zwraca liczbę pomyślnie przypisanych elementów.
Złożoność czasowa: NA)
Przestrzeń pomocnicza: O(n) gdzie n jest długością sygnału wejściowego.
Przykład 1: Rozważmy następujący plik tekstowy abc.txt
NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore>
Teraz chcemy przeczytać tylko pole miasta powyższego pliku tekstowego, ignorując wszystkie pozostałe pola. Połączenie fscanf i wspomnianej powyżej sztuczki pozwala to z łatwością
C // C Program to demonstrate fscanf #include // Driver Code int main() { FILE* ptr = fopen('abc.txt', 'r'); if (ptr == NULL) { printf('no such file.'); return 0; } /* Assuming that abc.txt has content in below format NAME AGE CITY abc 12 hyderabad bef 25 delhi cce 65 bangalore */ char buf[100]; while (fscanf(ptr, '%*s %*s %s ', buf) == 1) printf('%s
', buf); return 0; }> Wyjście
CITY hyderabad delhi bangalore>
Przykład 2: Rozważmy następujący plik binarny program.bin
n1 n2 n3 1 5 6 2 10 11 3 15 16 4 20 21>
Aby odczytać wszystkie wartości n1, n2 i n3 bin, używamy fscanf()
C #include #include struct threeNum{ int n1, n2, n3; }; int main(){ int n; struct threeNum num; FILE *fptr; if ((fptr = fopen('program.bin','rb')) == NULL){ printf('Error! opening file'); // Program exits if the file pointer returns NULL. exit(1); } for(n = 1; n < 5; ++n){ fread(&num, sizeof(struct threeNum), 1, fptr); printf('n1: %d n2: %d n3: %d', num.n1, num.n2, num.n3); } fclose(fptr); return 0; } //Code submitted by Susobhan Akhuli> Wyjście
n1: 1 n2: 5 n3: 6 n1: 2 n2: 10 n3: 11 n1: 3 n2: 15 n3: 16 n1: 4 n2: 20 n3: 21>
Zobaczmy różnice w formie tabelarycznej -:
| skanf() | fscanf() | |
| 1. | Służy do odczytu standardowego wejścia. | Ta funkcja służy do odczytywania danych wejściowych z pliku |
| 2. | Jego składnia to -: scanf(stała char *format,…) | Jego składnia to -: fscanf(PLIK *strumień, const char *format, …) |
| 3. | Wymaga, aby specyfikatory formatu pobierały dane wejściowe określonego typu. | Odczytuje strumień w postaci bajtu |
| 4. | Przyjmuje trzy parametry, którymi są -: Znak odstępu, znak inny niż odstęp, specyfikatory formatu wiek Sary Ali Khan | Jest to zdefiniowane w pliku nagłówkowym #include |