の一連の理解

Niuke.comからの質問です。ifステートメントを完全に理解させてください

クラブが会長に立候補したいとします。AとBの2人の候補者がいます。クラブの各学生は、1票しか投じることができません。投票数が多いのは会長です。
説明を入力してください:
1行、文字列、 AまたはBの場合、入力は文字0で終わります。
出力の説明:
1行、1文字、AまたはBまたはE、出力AはAの投票数が多いことを意味し、出力BはBの投票数が多いことを意味し、出力Eは2人の投票数が等しいことを意味します。

トピックはNiuke.comからのものです。分析は私からのものです。類似点はまったく偶然です。Niuke.comに感謝します。Niuke.comの大物に感謝します。明確に理解する機会を与えてくれました。

#include <stdio.h>
#include <string.h> 
int main(void)

{
    
    
int counta = 0, countb = 0;
    char ch[100];
    scanf("%s", ch);
       

    int sz = strlen(ch);
        for (int i = 0; i < sz; i++)
        {
    
    
            if (ch[i] == 'A')
                counta++;
            else if (ch[i] == 'B')
                countb++;
            else
                break;
        }   
       
     
        if (counta == countb)
            printf("E\n");
        else if (counta > countb)
            printf("A\n");
        else if(countb>counta)
            printf("B\n");
        

    return 0;

}

比較のために別のものを作りましょう

#include <stdio.h>
#include <string.h> 
int main(void)

{
    
    
int counta = 0, countb = 0;
    char ch[100];
    scanf("%s", ch);
       

    int sz = strlen(ch);
        for (int i = 0; i < sz; i++)
        {
    
    
            if (ch[i] == 'A')
                counta++;
            if (ch[i] == 'B')
                countb++;
            else
                break;
        }   
       
     
        if (counta == countb)
            printf("E\n");
        if (counta > countb)
            printf("A\n");
        if(countb>counta)
            printf("B\n");
        

    return 0;

}

もちろん、2つ目は間違っており、操作エラーです。エラーの鍵は、forループの判断ステートメントにあります。外部出力判定は基本的に問題ありません。
最初に2番目の
ループ、入力後の最初のループを取得し、最初のifまで実行し、条件がtrueかどうかを判断し、promiseがtrueの場合は実行してから、Enterキーを押して、falseの場合はこの条件をスキップします。それはelseに入り、中断し、forループから飛び出して、出力判定条件に入ります。原因になります

入力:ABBBB
outpur:A
が質問の意味と一致しません。問題はこれ以外にあります。Elseは最も近いifにリンクされます。ifが入力されない場合、それは間違いなくelseに入り、ループはすべての入力を判断できません。Aを入力する限り、elseに実行され、ループを終了します。 。

おすすめ

転載: blog.csdn.net/weixin_52199109/article/details/111086972