if,与elseif的用法出现的问题与差异

img

img


这个代码是计算有多少字母,数字,和空格。
我想请教,下面这张图输出的结果4 2 3是完全正确的,但是第二个if的条件语句对数字的计数,把else if换成if就会导致结果为3 3 3,代码和结果如图一所示,请问这是哪里的问题?!

当输入的是字母的时候,isalnum也返回true,因为16进制里abcdef也是合法数字
所以你必须要写else
另外,你要把i++拿到括号外面来执行,不管前面进入哪个if,都统一执行一次i++
你现在的逻辑,反复进入if就反复执行i++,导致跳过了一些字母没有进行判断

问题出在isalnum()函数:判断字符是否为英文字母或数字,所以你前面两个if不能同时判断,必须要用else,否则都会符合条件执行。请采纳

第一个if语句用于统计字母的个数,第二个if语句用于统计数字的个数,最后一个else语句用于统计空格的个数。

第二个if语句中使用的是else if,这意味着如果前面的if语句判断为true,那么就不会执行后面的else if语句。因此,第一个if语句统计字母的个数,第二个else if语句统计空格的个数,而数字则被忽略了。所以,输出的结果是 4 0 3。

如果将第二个else if语句改为if语句,那么无论前面的if语句是否为true,都会执行后面的if语句。因此,第一个if语句统计字母的个数,第二个if语句统计数字的个数,第三个if语句统计空格的个数。所以,输出的结果是 4 2 3。

总之,使用if和else if的区别在于前面的if语句判断为true后,后面的else if语句就不会再执行。如果你想要每个条件都能被计算,就应该使用多个if语句。