
[code]

    #include <stdio.h>
    
    main()
    {
      char c = '\0';
      char prevletter;
      int wordnum;
      int word_in;
    
      while(1)
      {
        wordnum = 0;
        word_in = 1;
        prevletter = '\0';
        printf("文字列を入力してください：");
        while(1)
        {
          c = getchar();
          if(c == '\n')
          {
              if(word_in)
                wordnum++;
              break;
          }
          prevletter = c;
          if(c == ' ' || c == '.')
          {
              if(word_in)
              {
                wordnum++;
                word_in = 0;
              }
          }
          else
              word_in = 1;
        }
        if(prevletter == '\0')
          break;
        printf("ワード数：%d\n", wordnum);
      }
    }
    
[/code]

上記のプログラム中

  * 10行目、16行目 `while(1)`の1は何か。(0ではエラーが起こり<2では正常に通りました。)
  * 13行目 `word_in = 1;`は無限ループのための宣言なのか。
  * 21行目、28行目 `if(word_in)`とは何を意味するのか。  
ご教授お願い致します。


CC BY-SA 3.0
2018-02-04T12:56:25.227
41457
2018-02-04T13:18:24.487
2018-02-04T13:03:24.820
2376
27276
question
c
while文での質問です


元々、C言語での真偽の判定は、intの 0(偽) か 0以外(真)で判定します。  
従って、

> 10行目16行目while(1)の1は何か。

常に、真(true)となり、無限ループとなります。

> 13行目 word_in = 1;は無限ループのための宣言なのか。

word_in は条件判定の変数ではないでしょうか?

> 21行目、28行目 if(word_in)とは何を意味するのか。

word_in が 0以外の場合、、、となります。

と、書いてみましたが、なんとなく、練習用に作成した古いプログラムという気がします。  
今となってはあまり良いコードとは思えませんね。


CC BY-SA 3.0
2018-02-04T13:18:05.843
41461
2018-02-04T13:18:05.843
41457
answer


> `while(1)`の1は何か

`while(cond)`は`cond`が0以外の間繰り返すので0以外をとる値であればなんでも無限ループに出来ますが、一般に`while(1)`は無限ループのスニペットとして無駄な混乱を避けれるでしょう。

> `word_in = 1;`は無限ループのための宣言なのか。

違いそうです。ここでは「直前の文字が単語文字列(スペースや`.`以外)かどうか」を保持するための変数のようです。

> `if(word_in)`は何を意味するのか

この場合、（21,28行目はそれぞれ改行や区切り文字の際ですが）その場合に上記の条件ならば単語数のカウントを増やすなのでそのための分岐ですね

* * *

同様のコードがOK Waveにも見つかりましたが、参照書籍等があるのであれば出典の明記を推奨します。


CC BY-SA 3.0
2018-02-04T13:18:24.487
41462
2018-02-04T13:18:24.487
2376
41457
answer