0

行、空白、タブの数を数えるというこの問題を解決しようとしました。

{ } の使い方がわからないため、私の解決策は正しくありませんでした。

main ()
{

    int newline; 
    int tab; 
    int blank;
    int c;

    newline = 0;
    tab = 0;
    blank = 0;

    while ((c = getchar()) != EOF) 
        if (c == '\n')
            ++newline;
        if (c == '\t')
            ++tab;
        if (c == 32)
            ++blank;

    printf("lines: %d tabs: %d blanks: %d\n", newline, tab, blank);
}

私のコードでは、新しい行だけがカウントされていました。タブとスペースはカウントされませんでした。答えは、if ステートメント セクションの周りに { } を追加することです。しかし、Googleで解決策を検索したので、これしか知りません。

おそらく私だけかもしれませんが、K&R はいつ { } を使用すべきかについて詳しく説明していません。

上記のコードに { } を追加する方法を誰かが説明できますか? コードを読むと、{} がなくても問題ないようです。それは私がその使い方を本当に理解していないことを意味します。上記のコードでタブとスペースがカウントされないのはなぜですか?

あなたが推薦できるCに関する別の本はありますか? プログラミング経験はありません。

4

4 に答える 4

2

シンプルの構文ifは :if (<condition>) <statement>です。は<statement>、単一のステートメント (コードにあるように) にすることも、ブロック (中かっこで囲まれた 0 個以上のステートメント) にすることもできます。ステートメントが 1 つの場合、それを中かっこで囲むかどうかは厳密にはスタイルの問題です。動作は同じです。

于 2013-07-19T15:24:59.803 に答える
1

比較的単純な「経験則」の 1 つ: セミコロンを探します。あなたの例を参照して、「while」から始めて、セミコロンが表示されるまで読み進めてください。そのセミコロンを超えるものを while ブロックの一部として実行したい場合は、すべて中かっこで囲む必要があります。

別の見方をすると、セミコロンはステートメント ターミネータです。前のステートメントのように空白 = 0 で終了しました。if だけでなく、それを囲む while ステートメントも終了します。したがって、次の if を while ブロックの一部として実行するには、if を中かっこで囲む必要があります。

ところで、C や類似の言語では、空白に構文上の意味はありません。せいぜいセパレータとして扱われます。適用することを選択したインデントは、人間の読者のためだけのものです。コンパイラにとっては意味がありません。

于 2013-07-19T15:29:58.263 に答える