最近做题遇到一个小问题,卡了我很久。输入不知道数量的int值时,我们通常用while(cin>>a[i++])和while(scanf("%d",&a[i++])!=EOF)。但实际上测试数据末尾通常有结束符,我们用EOF表示,当读取完最后一个数据时,接着会进行下一次读取,当然这一次读取是失败的,于是while循环结束。但有个很需要注意的点是,及时这一次读取失败,a[i++]依然会执行,那么如果代码是这样:
int main()
{
int n=0;
while(cin>>a[n++]);
}
我们读入的数据是:
1 2 3
最后n的值为4;
我们可以用以下两种写法:
int main()
{
int n=0;
while(cin>>a[n]){
n++;
}
}
int main()
{
int n=0;
while(cin>>a[n++]);
n--;
}
这样得到的n才不会给我们带来麻烦