★インデント★


「インデント」とは、「字下げ」といいます。

これまでもずっと使っているのですが、どこに使っているのでしょう。


<sample program col007-01>

#include <stdio.h>

int main( void )
{
    printf( "Hello C World\n" );

    return 0;
}

最初に書いたプログラムですが、printfの左やreturnの左に空白があります。

上のサンプルでは、半角空白4つを入れていますが、通常は「タブ」を使います。

「タブ」はキーボードの左端にある「Tab」と書かれたキーです。

これを押すと、「タブ」が入ります。

VC++ Express Editionでは、初期設定が「半角空白4文字分」となっています。

Windowsに付属の「メモ帳」では、「半角空白8文字分」となっています。

「タブ」は設定やソフトによって変わります。

VC++ Express Editionでは、改行すると勝手に入ります。

このインデントは何のためにあるのでしょうか。


インデントは、プログラムを読みやすくするためにあると考えてください。

C言語はフリーフォーマットと言って、下のように書いてもプログラムは動きます。

<sample program col007-02>

#include <stdio.h>
int main(void){printf("Hello C World\n");return 0;}

どうですか、極力空白やタブ、改行を無くしました。

これでも、動作します。

でも、見やすいですか?

ぱっと見て何をしているか分かりやすいですか?

長いプログラムになればなるほど、非常に分かりづらくなります。


次にこれはどうでしょう。

<sample program col007-03>

#include <stdio.h>

int main( void )
{
int input1;
int input2;
int input3;
printf( "整数1を入力してください:" );
scanf( "%d", &input1 );
printf( "整数2を入力してください:" );
scanf( "%d", &input2 );
printf( "整数3を入力してください:" );
scanf( "%d", &input3 );
if( input1 == input2 ) {
if( input1 == input3 ) {
printf( "3つの数は等しいです。\n" );
}
else{
printf( "3つの数は異なります。\n" );
}
}
else{
printf( "3つの数は異なります。\n" );
}
return 0;
}

個人的には、このようなプログラムは見たくありません・・・(もちろん触りたくもないです)


大分前にも書きましたが、「{」が出てきた時点で、「インデント」を入れます。

下のプログラムで確認してみてください。

<sample program col007-04>

#include <stdio.h>

int main( void )
{
    int input1;
    int input2;
    int input3;

    printf( "整数1を入力してください:" );

    scanf( "%d", &input1 );

    printf( "整数2を入力してください:" );

    scanf( "%d", &input2 );

    printf( "整数3を入力してください:" );

    scanf( "%d", &input3 );

    if( input1 == input2 ) {
        if( input1 == input3 ) {
            printf( "3つの数は等しいです。\n" );
        }
        else{
            printf( "3つの数は異なります。\n" );
        }
    }
    else{
        printf( "3つの数は異なります。\n" );
    }

    return 0;
}

どちらが見やすいでしょう。


インデントは時々、重要な問題を引き起こします。

次のプログラムは「特に意味のない」プログラムですが、どこが変かわかりますか。

<sample program col007-05>

#include <stdio.h>

int main( void )
{
    int data = 18;

    if( data > 10 ) {
        if( data < 20 ) {
            printf( "OK\n" );
        }
    else {
        printf( "NG\n" );
    }
    }

    return 0;
}

このプログラムは変数dataの中身が「10より大きくて、20未満」であればOKと表示し、
「10より大きくて、20以上」の場合はNGと表示するプログラムです。

よく見ると「}」が立て続けに書いてある場所があります。

これは、インデントがずれている「証拠」です。

このelse文はどちらのifに対してのelse文なのでしょうか?

ifとelseはセットです。

if文の「}」のすぐ下にあるelse文が、そのif文のelse文です。

上の例を見ると、else文の直前の「}」は2番目のif文のものです。


初心者の方は、インデントを気にしません。

おかしいな?と思わないので、なぜ動かないのか、なぜエラーになるのか、が分からないのです。

気になったとしても、往々にして次のような対処をします。

<sample program col007-06>

#include <stdio.h>

int main( void )
{
    int data = 18;

    if( data > 10 ) {
        if( data < 20 ) {
            printf( "OK\n" );
        }
    else {
        printf( "NG\n" );
    }

    return 0;
}

「}」が重なっていておかしいので、1つを削除してしいました。

コンパイルすると下記のようなエラーが表示されます。

main.cpp(17) : fatal error C1075: 左側 中かっこ '{' に対応するものが 'main.cpp(4)' で見つかる前に EOF が検出されました。

「{」に対応する「}」が見つかる前にEOF(ファイルの終わり:End Of File)が見つかったという意味です。

「{」を書いたら「}」が必ず必要です。

忘れていた場合「エラー」になります。

実際「エラー」を直した数だけ皆さんの力がついていきますが、エラーメッセージとエラーの内容をしっかり覚えていれば間違いが少なくなります。


インデントはVC++が自動的に入れてくれるのに、なぜこのようなエラーが発生するかと言いますと、プログラムを作っている最中に追加したり、削除したりしていると、どんどんインデントが崩れていきます。

プログラムを追加・削除した場合は、インデントの確認をすぐにしておきましょう。


ブラウザの戻るボタンで戻ってください。