if的一系列理解

牛客网的一道题,让我来彻底了解一下if语句

假设你们社团要竞选社长,有两名候选人分别是A和B,社团每名同学必须并且只能投一票,最终得票多的人为社长.
输入描述:
一行,字符序列,包含A或B,输入以字符0结束。
输出描述:
一行,一个字符,A或B或E,输出A表示A得票数多,输出B表示B得票数多,输出E表示二人得票数相等。

题目是牛客网的,分析来源于本人,如有雷同,纯属巧合。 感谢牛客网,感谢牛客网的大佬们,让我有机会可以清晰了解if。

#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;

}

当然第二个是错误的,运行错误,而错误的关键在for循环里的判断语句。外面的输出判断是基本没啥问题。
先拿第二个而言,
输入后的第一次循环,运行到第一个if,判断条件是否为真,诺为真,运行,再进入判断第二个if,如果为假,跳过这个条件,就会进入else,并且会break,跳出for循环,再进入输出判断条件。会导致

input: ABBBB
outpur: A
与题意不符。问题出在这个else上。else 会与最近的一个 if 链接,如果if不进入,就一定会进入else,而该循环无法判断完全部输入,只要输入一个A就会运行到else,并条跳出循环。

猜你喜欢

转载自blog.csdn.net/weixin_52199109/article/details/111086972