GNU/Linux >> Znalost Linux >  >> Linux

C Výukový program programování Část 5 - Znakové proměnné

V předchozích dvou tutoriálech jsme diskutovali o základech proměnných včetně toho, jak zabírají paměť. Zaměřili jsme se ale hlavně na celá čísla a plovoucí čísla. V tomto tutoriálu budeme diskutovat o znacích (nebo proměnných typu char).

Proměnné typu 'char' zabírají 1 bajt (nebo 8 bitů) v paměti. Jak jsem uvedl dříve v případě 'int' a 'float', můžete zkontrolovat množství paměti, kterou znak zabírá ve vašem systému, pomocí následujícího programu C:

#include 

int main (void)
{
printf("\n sizeof char v bytech je %u", sizeof(char) );

vrátí 0;
}

V mém systému byl výstup následující:

 velikost znaku v bajtech je 1                                                                                                          

Nyní přichází otázka, jak přijmout znaky jako vstup od uživatele a jak je vytisknout na výstup. Pro přijímání znaků ve vstupu existuje vyhrazená funkce s názvem 'getchar'. Podobně pro tisk jednotlivých znaků máte 'putchar'. Následující část kódu by vám měla poskytnout lepší představu o tom, jak tyto funkce fungují:

#include 

int main (void)
{
int c;
c =getchar();
putchar (c);

vrátí 0;
}

Výše uvedený kód při spuštění nejprve čeká, až uživatel vloží znak. Poté jednoduše vypíše stejný znak na terminál.

Mohlo by pro vás být trochu překvapivé, že vrácená hodnota 'getchar' je uložena jako celé číslo, ale je to tak (funkce vrací int). Ale vždy můžete porovnat hodnotu vrácenou 'getchar' se znakem. Zde je příklad:

#include 

int main (void)
{
int c;
c =getchar();
if (c =='a')
{
printf("odpovídá");
}
else
{
printf ("neodpovídá ");
}
vrátí 0;
}

Takže zde, pokud uživatel zadá 'a', program vypíše na výstup 'shoda'. Jinak uvidíte „neodpovídá“.

Jo, a ano, toto je poprvé, co jsme použili výrazy „pokud“ a „jinak“. Jak jste již pochopili, 'if' vám ​​umožňuje provést sadu příkazů, pokud je podmínka pravdivá. Když podmínka 'if' selže, spuštění kódu automaticky vstoupí do bloku 'else'. Všimněte si, že můžete použít příkaz 'if' bez příkazu a 'else', ale naopak není platný.

Nyní, když se vrátíme k getchar a putchar, pojďme rychle diskutovat o tom, jak lze tyto funkce použít k řešení skutečných problémů. Řekněme, že chcete spočítat počet řádků, které uživatel poskytl jako vstup do vašeho programu, pak to můžete udělat následujícím způsobem:

#include 

int main (void)
{
int c =0, counter=0;
c =getchar();
while(c !=EOF)
{
c =getchar();
if(c =='\n')
counter =counter+1;
}
printf("\n Vstup obsahuje %d řádků \n", čítač+1);
return 0;
}

Abyste výše uvedenému programu porozuměli, musíte nejprve vědět, co je EOF. EOF znamená End Of File. Používá se k označení, že uživatel dokončil zadávání vstupu.

Takže když jako uživatel poskytující vstup dokončíte proces, stisknete ctrl+d (několikrát). Je to tato akce, která vytváří hodnotu ekvivalentní hodnotě EOF, kterou lze zkontrolovat v programu – stejně jako my.

Když se vrátíme k programu, nejprve zkontrolujete první znak vstupu, abyste zjistili, zda se jedná o EOF. Pokud tomu tak není, vstoupíte do cyklu while a průběžně kontrolujete každý znak, dokud nezískáte EOF. Během celého tohoto procesu, kdykoli získáte znak nového řádku (\n), zvýšíte proměnnou 'counter'.

Po a detekci EOF je smyčka while ukončena a vypíšeme počet řádků, který je o jeden větší než hodnota čítače.

Důvod, proč přidáváme jedničku do 'counter' ve funkci 'printf' je ten, že počet řádků je vždy o jeden větší než počet znaků nového řádku (nebo laicky řečeno, kolikrát uživatel stiskl klávesu 'Enter'). Samozřejmě se předpokládá, že kdykoli uživatel stiskne enter, zadá také nějaký text.

Pokud tedy tomuto programu dáte vstup, jako je tento:

Dobrý den 
Vítejte v HowtoForge
Díky  

Výstup by byl:

Vstup obsahuje 3 řádky

Všimněte si, že náš kód předpokládá, že uživatel poskytne alespoň jeden řádek. Pár rohových pouzder není záměrně manipulováno, aby věci zůstaly jednoduché. Jedním z nich je, když uživatel zadá EOF bez zadání jakéhokoli jiného znaku na vstupu, a druhým, když byl poskytnut řádek bez zadání znaku nového řádku.

Výpočet počtu řádků je jen jedním příkladem. Tento kód můžete také rozšířit pro výpočet celkového počtu slov zadaných uživatelem. Berte to jako úkol a zkuste to naprogramovat sami. Jako nápovědu bych řekl, že zvažte mezery (' ') a tabulátory ('\t'), podobně jako jsme při výpočtu počtu řádků zvažovali nové řádky ('\n').

V tomto tutoriálu jsme diskutovali trochu více o postavách, včetně toho, jak je používat, přijímat je jako vstup a tisknout je na výstupu. Probrali jsme také příklad, kdy nám funkce getchar pomohla vypočítat počet řádků na vstupu. Vyzkoušejte úkol, který jsem zadal v posledním odstavci, a dejte mi vědět, pokud máte nějaké pochybnosti nebo dotazy.


Linux
  1. C Výukový program programování 4 - Proměnné a paměť

  2. C Výukový program programování Část 3 - Základy proměnných

  3. Výukový program programování v Linuxu C Část 10 - Variabilní rozsahy

  1. Výukový program programování v Linuxu C Část 9:Řetězce

  2. Výukový program programování Linux C, část 8 – Volání podle hodnoty versus volání podle ukazatele/adresy

  3. Výukový program programování Linux C, část 8 – Volání podle hodnoty versus volání podle ukazatele/adresy

  1. Výukový program programování Linux C, část 8 – Volání podle hodnoty versus volání podle ukazatele/adresy

  2. Linux C výukový program programování část 14 - praktické příklady bitových operátorů

  3. Výukový program programování v Linuxu C Část 12 – Operátory přiřazení a podmíněné výrazy