大神们看看,这个while中的j+=2;错在那儿
程序代码:
#include<iostream> #include <fstream> #include <string> using namespace std; int main() { int i=0; int j=0; int k; char a; char s[3]; char str[2000]; char ss[]="亚"; ifstream file("实验文本.txt"); while(!file.eof()) { str[i++]=file.get(); }; str[i]='\0'; while(str[j]!='\0') { if(str[j]<0) { s[0]=str[j]; s[1]=str[j+1]; s[2]='\0'; cout<<s<<endl; if(!strcmp(ss,s)) { k=j; cout<<"找到相应汉字且位置为"<<k<<endl; } j++; if (j!=i) j++; } else j++; } system("pause"); }上面是能正确运行的程序,环境VC6.0
大神们看看,为什么我把红色代码
j++;
if (j!=i)
j++;
这句改成
j+=2;
就不能成功终止循环呢?一直显示“烫”,不知道运行了多久,然后显示“$",停止了。
例如,对于这样的文件
ddwdawdwad你好亚洲dawdawda
按理说,前面都是j++,然后指向“你”,之后j+=2,指向“好”,j+=2.....以此类推,到“洲”时,j+=2,正好指向“d”,后面都是j++,到'\0'时判断str[j]!='\0'不成立,终止循环。中文字符都是高低字节成对出现,j+=2为什么会出现越界的情况呢?
另外考虑,如果i=10,此时如果j=9,那么j指向的一定不是中文字符(如果是中文字符,肯定是指向高字节,那么还有个低字节在str[10]的位置,和假设矛盾),因此不会有j+=2;只能是j++,此后j=10,str[j]=='\0',终止循环。
逻辑是没有什么错,但为什么运行起来就是不对呢?望指教!!!!!