formatting i o printf
Ten samouczek omawia użycie i przykłady funkcji, takich jak printf, sprintf, scanf, które są używane do formatowania wejścia / wyjścia w C ++:
W naszych poprzednich samouczkach dotyczących języka C ++ widzieliśmy, że możemy wykonywać operacje wejścia-wyjścia w C ++ za pomocą cin / cout.
Oprócz korzystania z tych konstrukcji możemy również skorzystać z biblioteki C. Korzystając ze standardowej biblioteki wejść i wyjść C (cstdio, odpowiednik C ++ dla nagłówka stdio.h w języku C), wykonujemy operacje we / wy przy użyciu „strumieni”, które działają z urządzeniami fizycznymi, takimi jak klawiatury (standardowe wejście), drukarki, terminale (standardowe wyjście ) lub inne typy plików obsługiwane przez system operacyjny.
=> Sprawdź szczegółowe samouczki szkoleniowe C ++ tutaj.
Strumienie to nic innego jak abstrakcyjny byt używany do interakcji z urządzeniami fizycznymi w jednolity sposób. Wszystkie strumienie mają podobne cechy i są niezależne od fizycznych urządzeń multimedialnych.
W kolejnych tematach tego samouczka szczegółowo poznamy kilka funkcji, tj. Printf, sprint i scanf.
Czego się nauczysz:
- C ++ printf
- Sprintf w języku C ++
- C ++ scanf
- scanf / printf vs. cin / cout W C ++
- Często Zadawane Pytania
- Wniosek
C ++ printf
Funkcja printf w C ++ służy do zapisywania danych wyjściowych sformatowanych na standardowe wyjście.
Prototyp funkcji:
int printf (format const char *,…);
Parametry:
format => Wskaźnik do ciągu zakończonego znakiem null zapisywanego w strumieniu pliku. Składa się ze znaków wraz z opcjonalnym specyfikatorem formatu, który zaczyna się od%. Specyfikator formatu jest zastępowany przez odpowiednie wartości następujące po ciągu formatu.
… => Inne dodatkowe argumenty określające dane do wydrukowania w kolejności, w jakiej określony jest format.
Wartość zwracana:
egzamin csqa pytania i odpowiedzi pdf
Sukces => printf zwraca liczbę zwróconych znaków.
Awaria => Ujemna wartość
Opis:
Funkcja printf jest zdefiniowana w nagłówku. Funkcje printf zapisują łańcuch wskazywany przez wskaźnik „format” na standardowe wyjście wyjściowe. Ciąg formatu może zawierać specyfikatory formatu, które są następnie zastępowane przez zmienne przekazane do funkcji printf jako dodatkowe argumenty (po ciągu formatu).
Specyfikator formatu używany w funkcji printf ()
Ogólną postacią specyfikatora formatu jest
%(flags)(width)(.precision)(length)specifier
Poniżej znajduje się opis każdej części specyfikatora formatu:
- % znak: To jest wiodący znak%
- Flagi: Mogą mieć następujące wartości:
- -: Lewy uzasadnia wynik w polu. Domyślnie wyrównanie do prawej.
- +: Znak wyniku dołączony na początku wartości, w tym wyniki dodatnie.
- Spacja: W przypadku braku znaku na początku wyniku jest umieszczana spacja.
- #: Określ alternatywną formę konwersji.
- 0: Używany do liczb całkowitych i zmiennoprzecinkowych. W przypadku braku spacji działają jak zera wiodące.
- Szerokość: Określa minimalną szerokość pola w postaci * lub liczby całkowitej. To jest opcjonalne.
- Precyzja: Określa precyzję za pomocą „.”, Po którym następuje *, liczba całkowita lub nic. Jest to również opcjonalne.
- Długość: Opcjonalny argument, który określa rozmiar argumentu.
- Specyficzny: To jest specyfikator formatu konwersji.
Różne specyfikatory formatu używane w C ++ są następujące:
Nie | Specyficzny | Opis |
---|---|---|
7 | u | Konwertuje liczbę całkowitą bez znaku na reprezentację dziesiętną. |
jeden | % | Drukuje%. |
dwa | do | Drukuje pojedynczy znak. |
3 | s | Drukuje ciąg. |
4 | d / i | Konwertuje liczbę całkowitą ze znakiem na reprezentację dziesiętną. |
5 | lub | Konwertuje liczbę całkowitą bez znaku na reprezentację ósemkową. |
6 | x / X | Konwertuje liczbę całkowitą bez znaku na reprezentację szesnastkową. |
8 | f / F. | Konwertuje liczbę zmiennoprzecinkową na reprezentację dziesiętną. |
9 | i / E. | Konwertuje liczbę zmiennoprzecinkową na dziesiętną notację wykładniczą. |
10 | a / A | Konwertuje liczbę zmiennoprzecinkową na wykładnik szesnastkowy. |
jedenaście | g / G | Konwertuje liczbę zmiennoprzecinkową na dziesiętną lub dziesiętną notację wykładniczą. |
12 | n | Liczba znaków zapisanych do tej pory przez to wywołanie funkcji. |
13 | p | Wskaźnik wskazujący na sekwencję znaków zdefiniowaną w implementacji. |
Poniżej podano kompletny przykład programowania w C ++, który demonstruje funkcję printf omówioną powyżej.
Przykład printf w C ++
#include //C++ printf example int main() { char ch = 'A'; float a = 8.0, b = 3.0; double d = 3.142; int x = 20; printf('float division : %.3f / %.3f = %.3f
', a,b,a/b); printf('Double value: %.4f
', d); printf('Setting width %*c
',4,ch); printf('Octal equivalent of %d is %o
',x,x); printf('Hex equivalent of %d is %x
',x,x); return 0; }
Wynik:
Powyższy program używa różnych wywołań funkcji printf i zauważamy, że każde wywołanie printf używa różnych specyfikatorów formatu, które omówiliśmy powyżej. Specyfikator formatu% .3f oznacza wartość zmiennoprzecinkową z maksymalnie 3 miejscami po przecinku. Pozostałe wywołania printf wyświetlają wartości znakowe, dziesiętne, ósemkowe i szesnastkowe.
Sprintf w języku C ++
Funkcja Sprintf w C ++ podobna do funkcji printf z jedną różnicą. Zamiast zapisywać dane wyjściowe na standardowe wyjście standardowe, sprintf zapisuje dane wyjściowe do bufora z ciągiem znaków.
Prototyp funkcji:
int sprintf (bufor char *, format const char *,…)
Parametry:
bufor => Wskaźnik do bufora łańcuchowego, do którego ma zostać zapisany wynik.
Format => Wskaźnik do ciągu zakończonego znakiem null, który jest zapisywany w strumieniu pliku.
Uwaga: Ciąg formatu używany w funkcji sprintf jest taki sam, jak ten omówiony w opisie funkcji printf.
… => Inne dodatkowe argumenty określające dane do wydrukowania w kolejności, w jakiej określony jest format.
Wartość zwracana:
sukces => Zwraca liczbę znaków zapisanych w wystarczająco dużym buforze z wyłączeniem kończącego znaku null.
Awaria => Zwracana jest wartość ujemna.
Opis:
Funkcja Sprintf jest zdefiniowana w nagłówku. Funkcja sprintf służy do zapisywania ciągu znaków wskazywanego przez format w buforze ciągów. Format łańcucha może zawierać specyfikatory formatu zaczynające się od%, które są zastępowane wartościami zmiennych, które są przekazywane do funkcji sprintf () jako dodatkowe argumenty.
Zobaczmy przykładowy program w C ++ pokazujący użycie funkcji sprintf.
sprintf Przykład
#include #include using namespace std; int main() { char mybuf(100); int retVal; char name() = 'Software Testing Help'; char topic() = 'C++ tutorials'; retVal = sprintf(mybuf, 'Hi, this is %s and you are reading %s !!', name, topic); cout << mybuf << endl; cout << 'Number of characters written = ' << retVal << endl; return 0; }
Wynik:
W powyższym przykładzie najpierw zapisujemy sformatowany ciąg znaków do bufora znaków mybuf za pomocą funkcji sprintf. Następnie wyświetlamy ciąg na stdout za pomocą cout. Na koniec wyświetlamy liczbę znaków zapisanych w buforze mybuf.
C ++ scanf
Funkcja scanf w C ++ odczytuje dane wejściowe ze standardowego wejścia standardowego.
Prototyp funkcji:
int scanf (format const char *,…)
Parametry:
format => Wskaźnik do ciągu zakończonego znakiem null, który definiuje sposób odczytywania danych wejściowych. Ten ciąg formatu składa się ze specyfikatorów formatu.
… => Dodatkowe argumenty otrzymujące dane wejściowe. Te dodatkowe argumenty są ułożone w kolejności zgodnie ze specyfikatorem formatu.
Wartość zwracana:
sukces => Zwraca liczbę wczytanych znaków.
matchingFailure => Zwraca zero, jeśli dopasowanie nie powiodło się przed przypisaniem pierwszego argumentu.
błąd wejścia => Zwraca EOF, jeśli błąd wejścia wystąpi przed przypisaniem pierwszego argumentu odbioru.
Opis:
Funkcja Scanf () jest zdefiniowana w nagłówku. Ta funkcja odczytuje dane ze standardowego wejścia i przechowuje w podanych zmiennych.
Specyfikator formatu używany w funkcji scanf ()
Ogólny format ciągu formatu funkcji scanf () to:
%(*)(width)(length)specifier
Zatem specyfikator formatu składa się z następujących części:
- Znak niebędący białymi znakami: Są to znaki z wyjątkiem%, które zużywają jeden identyczny znak ze strumienia wejściowego.
- Znak odstępu: Wszystkie kolejne białe znaki są traktowane jako jeden biały znak. To samo dotyczy sekwencji ucieczki.
- Specyfikacja konwersji: Ma następujący format:
- %: Znak określający początek.
- *: Wywołane przypisanie wygaszające znak. Jeśli jest obecny, scanf nie przypisuje wyniku do żadnych parametrów odbioru. Ten parametr jest opcjonalny.
- Szerokość pola: Opcjonalny parametr (dodatnia liczba całkowita), który określa maksymalną szerokość pola.
- Długość: Określa rozmiar otrzymywania argumentu.
Specyfikator formatu konwersji może wyglądać następująco:
Nie | Specyfikator formatu | Opis |
---|---|---|
7 | x / X | Dopasowuje liczbę całkowitą szesnastkową bez znaku. |
jeden | % | Dopasowuje dosłowne%. |
dwa | do | Dopasowuje pojedynczy znak lub wiele znaków do szerokości. |
3 | s | Dopasowuje sekwencję znaków niebędących białymi znakami do określonej szerokości lub pierwszej białej spacji. |
4 | re | Dopasowuje liczbę dziesiętną. |
5 | ja | Dopasowuje liczbę całkowitą. |
6 | lub | Dopasowuje ósemkową liczbę całkowitą bez znaku. |
8 | u | Dopasowuje dziesiętną liczbę całkowitą bez znaku. |
9 | a / A, e / E, f / F, g / G | Dopasowuje liczbę zmiennoprzecinkową. |
10 | (zestaw) | Dopasowuje niepustą sekwencję znaków z podanego zestawu. Jeśli poprzedzone jest ^, to dopasowywane są znaki spoza zestawu. |
12 | n | Zwraca liczbę przeczytanych dotąd znaków. |
13 | p | Wskaźnik do sekwencji znaków specyficznej dla implementacji. |
Następnie zaimplementujemy przykładowy program, aby zademonstrować użycie funkcji scanf w C ++
scanf Przykład
#include int main () { char str (80), pos_str(80); int i; printf ('Enter your company name: '); scanf ('%79s',str); printf ('Enter your position: '); scanf ('%s',pos_str); printf ('You work at %s as %s.
',str,pos_str); printf ('Enter a hexadecimal number: '); scanf ('%x',&i); printf ('You have entered %#x (%d).
',i,i); return 0; }
Wynik:
W powyższym programie czytamy dwa ciągi wejściowe i liczbę szesnastkową. Następnie łączymy dwa ciągi i wyświetlamy wynikowy ciąg. Liczba jest konwertowana na dziesiętną i wyświetlana.
scanf / printf vs. cin / cout W C ++
scanf / printf | cin / koszt |
---|---|
Standardowe wejście-wyjście w języku C. | Standardowe wejście-wyjście w języku C ++. |
Zdefiniowano w „stdio.h”. | Zdefiniowane w „iostream”. |
scanf i printf to funkcje używane do we / wy. | cin i cout są obiektami strumieniowymi. |
Ciąg formatu służy do formatowania danych wejściowych i wyjściowych. | Operatorzy >> i<< are overloaded and used along with cin and cout respectively. Nie jest używany żaden ciąg formatu. |
Typ danych określamy za pomocą symbolu zastępczego. | Nie ma potrzeby określania typu danych. |
Często Zadawane Pytania
Pytanie 1) Czy możesz używać printf w C ++?
Odpowiedź: Tak. Printf może być używany w C ++. Aby użyć tej funkcji w programie C ++, musimy dołączyć nagłówek do programu.
P # 2) W jakim języku jest używany printf?
Odpowiedź: Printf to standardowa funkcja wyjściowa w języku C. Może być również używany w języku C ++ przez dołączenie nagłówka do programu C ++.
P # 3) Czym jest% d w programowaniu w C?
Odpowiedź: % d wartość w funkcji printf odnosi się do wartości całkowitej.
P # 4) Dlaczego & jest używane w Scanf?
Odpowiedź: Operator & służy do uzyskiwania dostępu do lokalizacji pamięci. Skrótem jest przekazywanie wskaźnika do zmiennej zamiast przekazywania jej jawnie.
P # 5) Jaka jest różnica między printf () a sprintf ()?
Odpowiedź: Obie funkcje printf () i sprintf () są takie same, z wyjątkiem jednej różnicy. Podczas gdy printf () zapisuje dane wyjściowe na stdout (standardowe wyjście), sprintf zapisuje je w buforze ciągów znaków.
P # 6) Czy Sprintf zeruje zakończenie?
Odpowiedź: sprintf zwraca liczbę znaków przechowywanych w tablicy ciągów znaków z wyłączeniem znaku zakończenia o wartości null.
P # 7) Dlaczego sprintf jest niebezpieczny?
Odpowiedź: Funkcja Sprintf nie sprawdza długości bufora docelowego. W związku z tym, gdy długość ciągu formatu jest zbyt długa, funkcja może spowodować przepełnienie buforu docelowego. Może to prowadzić do niestabilności aplikacji i problemów z bezpieczeństwem, przez co funkcja sprintf będzie niebezpieczna.
Wniosek
W tym samouczku poznaliśmy funkcje wejścia-wyjścia biblioteki C - printf, sprintf i scanf, które mogą być używane w C ++ przez dołączenie nagłówka, który jest odpowiednikiem nagłówka C.
Jak już wspomniano, funkcje wejścia-wyjścia w specyfikatorach formatu i miejsce posiadaczy i musimy określić typy danych zmiennych, w których dane są odczytywane lub zapisywane.
W przeciwieństwie do tego, obiekty strumieniowe używane w C ++ - cin i cout nie używają żadnych specyfikatorów formatu ani symboli zastępczych. Używają przeciążonych >> i<< operators to read in and write the data.
=> Sprawdź doskonały przewodnik szkoleniowy C ++ tutaj.