★インデント★
「インデント」とは、「字下げ」といいます。
これまでもずっと使っているのですが、どこに使っているのでしょう。
<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++が自動的に入れてくれるのに、なぜこのようなエラーが発生するかと言いますと、プログラムを作っている最中に追加したり、削除したりしていると、どんどんインデントが崩れていきます。
プログラムを追加・削除した場合は、インデントの確認をすぐにしておきましょう。
ブラウザの戻るボタンで戻ってください。