刚学C++,不明白啊
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <math.h>
#define SIZE 5
void main()
{int k=0;
int number=0;
int counter=0;
int p[SIZE];
fstream is;
is.open("xulei2.txt",ios::out);
if(!is)
{
cout<<"xulei.txt can't open.\n";
}
int ch=is.get();
for(ch;ch!=-1;ch=is.get())
{
if(number==0)
{
p[number]=ch;
number++;
counter++;
continue;
}
if(number!=0&&number<SIZE)
{
for(int i=0;i<number;i++)
{
if(p[i]!=ch)
{
if(i==number)
{
p[number]=ch;
number++;
counter++;
break;
}
else
continue;
}
else
break;
}
continue;
}
if(number==SIZE)
{
for(int i=0;i<number;i++)
{
if(p[i]!=ch)
{
if(i==number)
{
p[k]=ch;
k=(k+1)%SIZE;
counter++;
break;
}
else
continue;
}
}
continue;
}
}
cout<<"counter= "<<counter<<endl;
}
结果为0啊!!!
xuelei2为1,2,3,2,3,5,1,0,-1
高手指教啊~~
参考答案:主要的问题在于continue语句,在进入循环前,ch = 1
执行
if(number==0)
{
p[number]=ch;
number++;
counter++;
continue;
}
但由于遇到continue语句,则结束当前运行,继续执行循环,此时for中的is.get()并不执行,如:
for(int i = 0; i < 3; i++)
{
if(i == 0) continue;
}
上面的语句为死循环,因为i++永远都不执行!
也就是说,上面的if语句块执行后ch仍然是1。最主要是你的这段代码写得有的糟糕,太多的break,continue语句,它类似于goto语句!
要么重新写这些if语句块,要么在要进行下一步读写时,将在for循环中的is.get()中移入if语句的continue前。
另外,你的数据文件应该是:
1 2 3 2 5 1 0 -1
而不要是
1, 2, 3, 2, 5, 1, 0, -1
除非你处理这些 ,