1

以下のコードがその下のコードとまったく同じように機能しないのはなぜだろうと思っていました。コードが行うべきことは、複数の連続するスペースを削除し、1 つのスペースのみを表示することです。したがって、「動作する」は「動作する」になります。コードの最初の部分は、「動作する」ように維持するだけです。

動作しません

#include <stdio.h>

main(){
    int c;
    int lastspace;

    lastspace = 0;
    while((c = getchar()) != EOF){
        if(c != ' ')
            putchar(c);
            lastspace = 0;
        if(c == ' '){
            if(lastspace == 0){
            lastspace = 1;
            putchar(c);
            }
        }
    }
}

作品

#include <stdio.h>

main(){
    int c
    int lastspace;

    lastspace = 0;
    while((c = getchar()) != EOF){
        if(c != ' ')
            putchar(c);
        if(c == ' '){
            if(lastspace != c){
            lastspace = c;
            putchar(c);
            }
        }
    }
}
4

1 に答える 1

5

あなたの最初の例では

if(c != ' ')
    putchar(c);
    lastspace = 0;

{}ステートメントの後に中かっこを配置しないifため、直後のステートメントのみが条件付きで実行されます。インデントを変更して中括弧を追加すると、コードが実際に

if(c != ' ') {
    putchar(c);
}
lastspace = 0;

{}これが、一部のコーディング標準が以下のすべての制御ステートメントの使用を義務付けている理由です。

于 2013-08-01T16:04:53.990 に答える