56050


C言語に慣れてないため、お知恵を貸して頂けると嬉しいです。

whiteとblackのいずれかを入力して、  
whiteが2つになったら、pass  
blackが3つになったら、failure  
にするようにしたいです。  
一応コードを書いてみましたが、  
期待通りの出力結果が得られないです。

■入力例

[code]

    4
    black
    black
    white
    black
    
[/code]

■出力例

[code]

    black
    black
    white
    failure ←4回目にblackが入力され、その時点でblackが3つになったため、failureを出力する。
    
[/code]

[code]

    #include <stdio.h>
    #include <string.h>
    
    int blackcount; 
    int whitecount; 
    
    void count_black(void) {
        if(blackcount == 3)
        {
            printf("failure"); 
        }
        else{
            printf("black");
        }
    
    }
    
    void count_white(void) {
        if(whitecount == 2)
        {
            printf("pass"); 
        }
        else{
            printf("white"); //strike!
        }
    }
    
    int main(void){
    
        int i,num;
        char Judgment[10];
        char *s1 = "black";
    
        scanf("%d",&num);
    
        if((3<=num)&&(num<=6)){
            for(i=1; i<=num; i++){
    
                scanf("%s", Judgment);
    
                if (strcmp(Judgment,s1) == 0)
                {
                    count_black();
                    blackcount++;
                }
                else{
                    count_white();
                    whitecount++;
                }
            }
        }
        return 0;
    }
    
[/code]

宜しくお願い致します。


CC BY-SA 4.0
2019-06-24T02:28:23.173
56047
2019-06-24T04:26:31.787
2019-06-24T04:26:31.787
7676
34810
question
c
期待通りの出力結果が得られないです。


カウントしてから `count_black` `count_white` を実行することで、期待通りの出力が得られます。

この回答ではそれぞれの `count_` 内部での `white` 及び `black` の数を出力しています。

[code]

    #include <stdio.h>
    #include <string.h>
    
    int blackcount;
    int whitecount;
    
    void count_black(void) {
      if(blackcount == 3) {
        printf("failure\n");
      } else {
        printf("[%d]white [%d]black\n", whitecount, blackcount);
      }
    }
    
    void count_white(void) {
      if(whitecount == 2) {
        printf("pass\n");
      } else {
        printf("[%d]white [%d]black\n", whitecount, blackcount);
      }
    }
    
    int main(void){
      int i,num;
      char Judgment[10];
    
      scanf("%d",&num);
    
      if((3<=num)&&(num<=6)){
        for(i=1; i<=num; i++){
    
          scanf("%s", Judgment);
    
          if (strcmp(Judgment, "black") == 0) {
              blackcount++;
              count_black();
          } else{
            whitecount++;
            count_white();
          }
        }
      }
      return 0;
    }
    
[/code]

また、回答とは外れるコメントとなりますが、 `blackcount` 及び `whitecount`
をグローバルに置くならばそれぞれの関数の中でカウントするほうが分かりやすくなるかと思います。


CC BY-SA 4.0
2019-06-24T02:41:52.000
56050
2019-06-24T02:41:52.000
29826
56047
answer