K&R の The C Programming Language でいくつかの例に取り組んできましたが、if ステートメントと else ステートメントを切り替えた演習 1-12 で行ったテストでちょっと混乱しています。
質問は次のようになります: 入力を 1 行に 1 語出力するプログラムを作成してください。
基本的に、単語間の複数のスペースを無視しながら \n をテストするために、最初にこれを書きました。
#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\t') {
printf("\n");
}
else {
putchar(c);
}
}
}
この例では、空白またはタブを検出すると新しい段落を出力し、そうでない場合は入力を正確にコピーします。
このコードは、私が望んでいた結果を生成しました (入力の単語間に余分なスペースがあるため、まだ余分な段落がありますが、今のところ無視しています)
そこで、条件を変えながらif文とelse文を入れ替えたらどうなるか見てみようと思ったのですが、結果は同じではありません。
#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != EOF) {
if (c != ' ' || c != '\t') {
putchar(c);
}
else {
printf("\n");
}
}
}
この例では、空白やタブではないものをすべて印刷したいと考えていました。そうでない場合は、新しい段落が作成されます。
新しい条件でも同じ結果が得られると思っていました。代わりに、入力したものをコピーしただけです。これが機能しない理由を誰かが知っていますか?