else if 使用注意
写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
例如:输入:ABCDE
A
输出:1
错误代码如下:
#include <iostream> #include <string> using namespace std; int main() { string str; int count=0; char last; getline(cin,str); scanf("%c",&last); for(int i=0;i<str.size();i++) { if((last>='0'&&last<='9')||(last==' ')) if(last==str[i]) count++; else if((last>='a')&&(last<='z')) if(last==str[i]||last==str[i]+('a'-'A')) count++; else if((last>='A')&&(last<='Z')) if(last==str[i]||last==str[i]-('a'-'A')) count++; } cout<<count<<endl; return 0; }
正确代码如下:
#include <iostream> #include <string> using namespace std; int main() { string str; int count=0; char last; getline(cin,str); scanf("%c",&last); for(int i=0;i<str.size();i++) { if((last>='0'&&last<='9')||(last==' ')) if(last==str[i]) count++; if((last>='a')&&(last<='z')) if(last==str[i]||last==str[i]+('a'-'A')) count++; if((last>='A')&&(last<='Z')) if(last==str[i]||last==str[i]-('a'-'A')) count++; } cout<<count<<endl; return 0; }
可见,对比正确代码和错误代码,不同之处只有for循环内部的分支选择,为什么此处else if用法是错误的呢?
经过调试,发现错误代码中满足第一个if的可以进入,满足后边两个else if的均无法进入执行,望高手解答!!!