logo

Разлика между printf() и scanf() в C

Въведение:

Printf() и Scanf() са вградени библиотечни функции на езика C, които изпълняват форматиран вход и форматиран изход функции. Тези функции са дефинирани и декларирани в stdio.h заглавен файл . The 'е' в printf и сканиране означава 'форматиран' . И така, и двете функции printf() и scanf() използвайте кодове в низ за форматиране, за да укажете как изходните или входните стойности трябва да бъдат форматирани. Трябва да импортираме заглавния файл, за да го използваме printf() и scanf() :

 #include 

В тази статия ще обсъдим разликата между printf() и scanf(), но преди да обсъдим разликите, трябва да знаем за printf() и scanf() с техния синтаксис и примери.

Printf():

То отпечатъци нещо между двойни кавички с спецификатори на формат %c, %d,%f, и т.н., за да покаже стойност на променлива или константа и може също да има знаци за екранираща последователност като , за нова линия, и хоризонтален раздел , съответно.

генератор на случайни числа в c

Синтаксис:

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

Scanf():

Позволява ни да прочетем една или няколко стойности, въведени от потребителя чрез клавиатурата на конзолата. Можем да поставим колкото се може повече спецификатори на формата колкото входове искаме със или без формат.

Синтаксис:

 scanf(%format_specifier, &pointer_to_variable); 

Низ на спецификатор на формат:

В първия параметър на printf и сканиране , минаваме форматиращ низ или низ за спецификация на формат и указваме какъв тип стойност ще въведе потребителят.

Тип данни Преобразуване форматиращ низ
Цяло число кратко цяло число %d или % i
кратко неподписано % в
отдавна подписан % ld
отдавна неподписан % lu
беззнаков шестнадесетичен % х
неподписан осмичен %O
истински плавам % f или % g
двойно %lf
подписан знак %° С
неподписан char %° С
низ

Например, ако потребител влезе двадесет като вход, като двадесет е десетично цяло число , ние указваме всички десетични цели числа в C, като използваме %d спецификатор на формат . По същия начин, плаващи стойности се определят с помощта на %f .

подравняване на css изображение

Основен код за Printf() и Scanf():

Пример 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; } 

Изход:

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

Обяснение:

В горната програма ние използваме scanf() да чете входа от конзолата и да ги съхранява в променливи а и б. След това извършваме аритметични операции като допълнение , изваждане , и умножение и по-късно да съхранявате резултатите в три нови променливи (Sum, Sub, Mul). И накрая, с помощта на функция printf(). , печатаме резултатите.

Пример 2:-

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

В горната програма, scanf() чете два входа от програмата, въпреки че предаваме една променлива, защото сме посочили два спецификатора на формат . Винаги помнете, In scanf()/printf() всички спецификатори на формата които предаваме, трябва да са същите, в противен случай може да получим някои неочаквани грешки по време на изпълнение.

Пример 3:

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

Изход:

 5 Execution finished... 

Обяснение:

В горната програма, scanf() чете само един вход от потребителя, защото сме посочили само един спецификатор на формат . Така че от този пример заключаваме, че нито един от входовете няма да бъде взет в зависимост от броя на спецификатори на формата .

Пример 4:

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

Изход:

 6 Segmentation fault 

Обяснение:

В горната програма предаваме стойността на променлива на scanf() вместо адреса на променливата. Това ще доведе до а грешка по време на изпълнение . В Linux ще получим грешка при сегментиране.

пощальон

Пример 5:

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

Изход:

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

Обяснение:

В горната програма, когато printf сканира форматиращия низ, той ще замени спецификатори на формат (%d) с действителните стойности, към които преминаваме printf() . т.е. първият спецификатор на формат ще бъде заменен от първата стойност, която предаваме printf(), и така нататък.

Основни разлики между Printf() и Scanf()

Малко разлики между printf и scanf са: -

    функция printf(). извежда данни към стандартния изход, т.е. към конзолата. За разлика от тях, функция scanf(). чете данни от стандартния вход, т.е. входни устройства printf() рядко използва указател в няколко случая, но scanf() винаги използва указател, за да присвои стойност на дадената променлива. printf() и scanf() и двете имат един и същ тип връщане на цяло число . The printf() връща броя знаци, които успешно е отпечатал на конзолата, докато scanf() се завръща 0,1 или EOF въз основа на предоставения спецификатор на формат.