牛客网的一道题,让我来彻底了解一下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,并条跳出循环。