logo

Różnica między printf() i scanf() w C

Wstęp:

Drukujf() I Skanuj() to wbudowane funkcje biblioteczne w języku C, które działają sformatowane wejście I sformatowane wyjście Funkcje. Funkcje te są zdefiniowane i zadeklarowane w plik nagłówkowy stdio.h . The 'F' W drukuj I skanf oznacza „sformatowany” . A więc obie funkcje printf() I skanf() użyj kodów w ciągu formatującym, aby określić, w jaki sposób powinny być formatowane wartości wyjściowe lub wejściowe. Musimy zaimportować plik nagłówkowy, aby go użyć printf() I skanf() :

 #include 

W tym artykule omówimy różnicę między printf() i scanf(), ale zanim omówimy różnice, musimy poznać funkcje printf() i scanf() wraz z ich składnią i przykładami.

Drukujf():

To drukuje cokolwiek pomiędzy podwójne cudzysłowy z specyfikatory formatu %c, %d,%f, itp., aby pokazać wartość zmiennej lub stałej i może również zawierać znaki sekwencji ucieczki, takie jak , Do Nowa linia, I zakładka pozioma odpowiednio.

pandy tworzące ramkę danych

Składnia:

 printf('(string) %format_specifier (string)',variable); 

Skanuj():

Pozwala na odczytanie jednej lub wielu wartości wprowadzonych przez użytkownika za pomocą klawiatury na konsoli. Możemy umieścić dowolną liczbę specyfikatory formatu tyle danych wejściowych, ile chcemy, z formatem lub bez.

Składnia:

 scanf(%format_specifier, &pointer_to_variable); 

Ciąg specyfikatora formatu:

W pierwszym parametrze drukuj I skanf , zdajemy ciąg formatujący Lub ciąg specyfikatora formatu , i określamy, jakiego rodzaju wartość zamierza wprowadzić użytkownik.

Typ danych Konwersja ciąg formatujący
Liczba całkowita krótka liczba całkowita %d lub %i
krótki, niepodpisany % W
dawno podpisany % ld
dawno niepodpisany % lu
szesnastkowy bez znaku % X
ósemkowa bez znaku %O
Prawdziwy platforma % f lub % g
podwójnie %lf
podpisany znak %C
znak bez znaku %C
strunowy %S

Na przykład, jeśli użytkownik wejdzie 20 jako wejście, jako 20 jest dziesiętna wartość całkowita , określamy wszystkie dziesiętne wartości całkowite w C za pomocą Specyfikator formatu %d . Podobnie, wartości pływające są określone za pomocą %F .

Podstawowy kod funkcji Printf() i Scanf():

Przykład 1:

 #include int main() { int a, b; int sum = 0, sub = 0, mul = 0; printf('Please enter the two values:'); /* Read input */ scanf('%d%d', &a, &b); sum = a+b; sub = a-b; mul = a*b; /* Print output */ printf('The sum = %d 
sub = %d 
mul = %d', sum, sub, mul); return 0; } 

Wyjście:

 Please enter the two values:8 6 The sum = 14 sub = 2 mul = 48 

Wyjaśnienie:

W powyższym programie używamy skanf() odczytać dane wejściowe z konsoli i zapisać je w zmiennych a i b. Następnie wykonujemy operacje arytmetyczne, takie jak dodatek , odejmowanie , I mnożenie i później zapisz wyniki w pliku trzy nowe zmienne (Sum, Sub, Mul). Wreszcie za pomocą funkcja printf(). , drukujemy wyniki.

Przykład 2:-

 #include int main() { int a; scanf('%d %d', &a); printf('Execution finished...'); return 0; } 

W powyższym programie skanf() odczytuje dwa wejścia z programu, mimo że przekazujemy jedną zmienną, ponieważ ją określiliśmy dwa specyfikatory formatu . Zawsze pamiętaj, In scanf()/printf() wszystkie specyfikatory formatu które przekazujemy, powinny być takie same, w przeciwnym razie mogą pojawić się nieoczekiwane błędy w czasie wykonywania.

Przykład 3:

 int main() { int a, b; scanf('%d', &a, &b); printf('Execution finished...'); return 0; } 

Wyjście:

mrówka kontra maven
 5 Execution finished... 

Wyjaśnienie:

W powyższym programie skanf() czyta tylko jedno wejście od użytkownika, ponieważ określiliśmy tylko jeden specyfikator formatu . Z tego przykładu wnioskujemy, że żadne dane wejściowe nie zostaną pobrane w zależności od liczby specyfikatory formatu .

Przykład 4:

 #include int main() { int a; scanf('%d', a); printf('Execution finished'); } 

Wyjście:

 6 Segmentation fault 

Wyjaśnienie:

W powyższym programie przekazujemy wartość zmiennej do skanf() zamiast adresu zmiennej. Doprowadzi to do błąd czasu wykonania . W systemie Linux otrzymamy błąd błędu segmentacji.

pothineni baran

Przykład 5:

 #include int main() { int a = 10; int b = 20; printf('the value of a = %d, the value of b = %d', a, b); } 

Wyjście:

 the value of a = 10, the value of b = 20 

Wyjaśnienie:

W powyższym programie, kiedy drukuj skanuje ciąg formatujący, zastąpi on specyfikatory formatu (%d) z rzeczywistymi wartościami, do których przekazujemy printf() . oznacza to, że pierwszy specyfikator formatu zostanie zastąpiony pierwszą wartością, którą przekazujemy printf(), i tak dalej.

Podstawowe różnice między Printf() i Scanf()

Kilka różnic między printf i scanf to: -

    funkcja printf(). wyprowadza dane na standardowe wyjście, czyli do konsoli. Dla kontrastu, funkcja scanf(). odczytuje dane ze standardowego wejścia, czyli urządzeń wejściowych printf() rzadko używa wskaźnika w kilku przypadkach, ale skanf() zawsze używa wskaźnika do przypisania wartości do danej zmiennej. printf() I skanf() oba mają ten sam typ zwrotu liczba całkowita . The printf() zwraca liczbę znaków, które pomyślnie wydrukowano na konsoli, natomiast skanf() zwroty 0,1 lub EOF w oparciu o dostarczony specyfikator formatu.