GNU/Linux >> Linux の 問題 >  >> Linux

Cプログラミングチュートリアルパート5-文字変数

前の2つのチュートリアルでは、変数がメモリをどのように占有するかなど、変数の基本について説明しました。しかし、私たちは主に整数と浮動小数点数に焦点を合わせました。このチュートリアルでは、文字(またはchar型変数)について説明します。

'char'タイプの変数は、メモリ内で1バイト(または8ビット)を占有します。 「int」と「float」の場合で前述したように、次のCプログラムを使用して、キャラクターがシステム上で占有しているメモリの量を確認できます。

 #include  

int main(void)
{
printf( "\ n sizeof char in bytes is%u"、sizeof(char) );

0を返す;
}

私のシステムでは、次の出力がありました:

バイト単位のcharのサイズは1pre> 

次に、ユーザーからの入力として文字を受け入れる方法と、それらを出力に出力する方法について説明します。さて、入力で文字を受け入れるために、「getchar」という名前の専用関数があります。同様に、個々の文字を印刷するには、「putchar」があります。次のコードは、これらの関数がどのように機能するかについてのより良いアイデアを提供するはずです。

 #include  

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

0を返す;
}

上記のコードは、実行されると、最初にユーザーが文字を入力するのを待ちます。その後、端末に同じ文字を出力するだけです。

'getchar'が返す値が整数で格納されているのは少し意外かもしれませんが、そのようになっています(関数はintを返します)。ただし、「getchar」によって返される値はいつでも文字と比較できます。次に例を示します:

 #include  

int main(void)
{
int c;
c =getchar();
if (c =='a')
{
printf( "matched");
}
else
{
printf("一致しません");
}
return 0;
}

したがって、ここで、ユーザーが「a」を入力すると、プログラムは「matched」を出力に出力します。それ以外の場合は、「一致しません」が表示されます。

そうです、「if」および「else」ステートメントを使用したのはこれが初めてです。これまでに理解していたように、「if」を使用すると、条件が真の場合に一連のステートメントを実行できます。 'if'条件が失敗すると、コード実行は自動的に'else'ブロックに入ります。 'if'ステートメントを使用せずに'else'ステートメントを使用できますが、その逆は無効であることに注意してください。

ここで、getcharとputcharに戻って、これらの関数を使用して実際の問題を解決する方法について簡単に説明しましょう。ユーザーがプログラムへの入力として提供した行数を数えたいとしましょう。そうすると、次の方法でそれを行うことができます。

 #include  

int main(void)
{
int c =0、counter =0;
c =getchar();
while(c!=EOF)
{
c =getchar();
if(c =='\ n')
counter =counter + 1;
}
printf( "\ n入力に%d行が含まれています\ n"、counter + 1);
return 0;
}

上記のプログラムを理解するには、最初にEOFとは何かを知る必要があります。 EOFはEndOfFileの略です。これは、ユーザーが入力の入力を完了したことを示すために使用されます。

したがって、入力を提供するユーザーとしてプロセスが完了したら、ctrl + dを押します(数回)。 EOFと同等の値を生成するのはこのアクションであり、プログラムでチェックできます。これは、私たちが行ったのと同じです。

プログラムに戻って、最初に入力の最初の文字をチェックして、それがEOFであるかどうかを確認します。そうでない場合は、whileループに入り、EOFを取得するまで各文字を継続的にチェックします。このプロセス全体で、改行文字(\ n)を取得するたびに、「counter」変数を増やします。

EOFが検出された後、whileループが終了し、counterの値より1多い行数を出力します。

'printf'関数の'counter'に1を追加する理由は、行数が常に改行文字数(または、素人の用語では、ユーザーが'Enter'キーを押した回数)より1つ多いためです。もちろん、これは、ユーザーがEnterキーを押すたびに、テキストも入力することを前提としています。

したがって、このプログラムに次のような入力を与えると、次のようになります。

こんにちは
HowtoForgeへようこそ
ありがとうございます

出力は次のようになります:

入力には3行が含まれています

このコードは、ユーザーが少なくとも1行を提供することを前提としていることに注意してください。いくつかのコーナーケースは、物事を単純にするために意図的に処理されていません。 1つは、ユーザーが入力に他の文字を指定せずにEOFを指定した場合、もう1つは、改行文字を指定せずに行が指定された場合です。

行数の計算はほんの一例です。このコードを拡張して、ユーザーが入力した単語の総数を計算することもできます。これを割り当てと見なし、自分でコーディングしてみてください。ヒントとして、行数を計算するために改行('\ n')を検討したのと同様に、スペース('')とタブ('\ t')を検討すると思います。

このチュートリアルでは、文字の使用方法、入力としての受け入れ、出力での印刷など、文字についてもう少し説明しました。また、getchar関数が入力の行数の計算に役立つ例についても説明しました。前の段落で与えた課題を試してみて、疑問や質問がある場合はお知らせください。


Linux
  1. Cプログラミングチュートリアルパート3-変数の基本

  2. LinuxCプログラミングチュートリアルパート10-可変スコープ

  3. Linux Cプログラミングチュートリアルパート9:文字列

  1. LinuxCプログラミングチュートリアルパート8-値による呼び出しとポインタ/アドレスによる呼び出し

  2. LinuxCプログラミングチュートリアルパート8-値による呼び出しとポインタ/アドレスによる呼び出し

  3. LinuxCプログラミングチュートリアルパート8-値による呼び出しとポインタ/アドレスによる呼び出し

  1. Cプログラミングチュートリアル4-変数とメモリ

  2. LinuxCプログラミングチュートリアルパート14-ビット演算子の実際の例

  3. Awk チュートリアル:3 つの実践例で Awk 変数を理解する