mixC++ C言語何でも質問掲示板 投稿前チェックリスト

C言語何でも質問掲示板に投稿する際、気を付けたい事のリストです。

特に初めて投稿するときには、すべてのチェック項目に一度目を通すと、

という効果を得られます。

チェック1 : 課題の丸投げをしない

学校で出たプログラミングの課題が解けずに質問してくる人が結構いらっしゃいます。 そのこと自体は特に問題有りませんが、質問文に問題がある場合が多々あります。

プログラミングの課題がまったく分かりません。
問題文は以下です。

(問題文が貼り付けてある)

よろしくお願いします。

これはダメです。これでは「答えだけ欲しい。解説はいらない。」と言っているようなものです。 たとえ本心がそうであったとしても、こんな質問文では回答者に悪い印象を持たれるだけ。もうちょっと努力しましょう。例えば・・・

プログラミングの課題がなかなか難しくて解けません。
問題文は以下です。

(問題文が貼り付けてある)

私は最初、このようなプログラムを書きました。

(プログラムのソースコードを貼り付ける)

でもこれだと、出力結果が「△△」になってしまいます。本当は「〇〇」にならないといけません。
・・・の部分が良くないと思って、こんな風に改造してみました。

(改造部分を貼り付ける)

今度は出力が「△○」になりました。さっきよりは改善しましたが、まだだめです。
~~の部分が良くないのかなと思ったので、次はこんな風に改造してみました。

(改造部分を貼り付ける)

出力は「○△」になりました。よく考えてみても、これ以上どういう風に改造していいか分かりませんでした。
アドバイスをいただければ嬉しいです。

こんな感じに質問すれば、回答者の印象も随分アップします。助けてあげよう、という気持ちになります。 大切なのは、向上心をアピールすることです。

チェック2 : ソースコードをそのまま貼り付けない

これは掲示板の使い方を知らないために発生するものです。 掲示板に「そのまま」ソースコードを貼ってしまうと、こんな感じの表示になってしまいます。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
char str[128];
char* p;
int a, b;
while (1)
{
fgets(str, sizeof(str), stdin);
if (str[strlen(str) - 1] == '\n')
{
str[strlen(str) - 1] = '\0';
}

if (strcmp(str, "quit") == 0)
{
break;
}
else if ((p = strchr(str, '+')) != NULL)
{
*p = '\0';
p++;
a = atoi(str);
b = atoi(p);
printf("%d + %d = %d\n", a, b, a + b);
}
else
{
printf("unknown command: %s\n", str);
}
}
return 0;
}

これは非常に読みにくいです。ソースコードを貼り付けるときは、

[code]
ソースコード
[/code]

とやりましょう。codeタグで挟んだものは色分けされ、行頭の空白などもそのまま維持されるようになります。

チェック3 : インデントを揃えよう

チェック2で示したような、のっぺりしたソースコードのことを「インデントがされていないソースコード」などといいます。 「インデント」というのは字下げのことで、C言語の場合は適切に字下げをすることが普通です。

まず、一応字下げはされているが、非常に汚い字下げになってしまっている例(極端な例ではなく、実際に良く見かけます)を示します。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

  int main(void)
{
   char str[128];
  char* p;
  int a, b;
     while (1)
     {
     fgets(str, sizeof(str), stdin);
  if (str[strlen(str) - 1] == '\n')
  {
             str[strlen(str) - 1] = '\0';
        }

   if (strcmp(str, "quit") == 0)
      {
       break;
       }
    else if ((p = strchr(str, '+')) != NULL)
    {
         *p = '\0';
         p++;
      a = atoi(str);
      b = atoi(p);
      printf("%d + %d = %d\n", a, b, a + b);
          }
    else
     {
         printf("unknown command: %s\n", str);
 }
 }
  return 0;
}

美しさの「う」の字もありません。もう一つの例も示します。

#include <stdio.h>

struct Hoge {
 int a;
 char b;
};

int main(void)
{
   char str[128];
   struct Hoge hoge;

    hoge.a = 0;
    hoge.b = ' ';
       while (1)
       {
           fgets(str, sizeof(str), stdin);
           if (str[strlen(str) - 1] == '\n')
           {
             str[strlen(str) - 1] = '\0';
           }

           if (strcmp(str, "quit") == 0)
           {
             break;
           }
       }
       return 0;
}

さっきの例よりは揃っているように見えますが,でもまだダメです. 字下げが汚いのはバグやエラーの温床ですから、字下げをきれいにするのは非常に重要なことです。 スペースキーやバックスペースキーを使って、こつこつ修正する習慣を身につけましょう。

さらに、こんな字下げでは回答者の「回答する気力」が失せますし、質問者さんの「やる気」を疑わざるを得なくなります。

字下げの基本はこうです。

この2つを守るだけで見違えるようになります。 例えば上に示した、悪い例の字下げを直すとこうなります。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    char str[128];
    char* p;
    int a, b;
    while (1)
    {
        fgets(str, sizeof(str), stdin);
        if (str[strlen(str) - 1] == '\n')
        {
            str[strlen(str) - 1] = '\0';
        }

        if (strcmp(str, "quit") == 0)
        {
            break;
        }
        else if ((p = strchr(str, '+')) != NULL)
        {
            *p = '\0';
            p++;
            a = atoi(str);
            b = atoi(p);
            printf("%d + %d = %d\n", a, b, a + b);
        }
        else
        {
            printf("unknown command: %s\n", str);
        }
    }
    return 0;
}

どうですか。だいぶ美しくなりましたね。


このページは、beatle様が書かれたページ(2014/8/20リンク切れ確認)の転載です。

戻る