即使循环断开(在命令行)中,读取输入序列也是如此
Input sequence is read even when loop breaks (in command line)
我该如何处理这个问题?
while(ntestcase--)
{
int i, n, max;
cin >> n;
for(i = 0; i < n; i++)
{
cin >> a;
if(a >= 2)
max += 2;
else
break;
}
cout << "max=" << max << " n=" << n << " i=" << i << "n";
if(i == n && max != 0)
cout << max << "n";
else
cout << -1;
}
考虑输入
ntestcase=3
n=5
as a's
1 2 3 4 5
我对问题的基本推论是,这里将输入5 a,但是当遇到1时,循环断裂并给出输出。在同一输入2之后,下一个测试案例被认为是" N"A为3、4,然后输出n,然后n为5。
产生的输出有点像这样:
max=0 n=5 i=0
-1
max=4 n=2 i=2
4
如何解决此问题并将序列(例如:1 2 3 4 5
)视为单个输入?
看来您对错误的分析是正确的。当您突破循环时,未读取输入while(ntestcase--)
的当前迭代剩下了,是用作下一次迭代的输入。
如果我是我的所有这些代码可能会大不相同编写我自己的程序(一方面,我会避免使用相同的变量i
来计算从输入和中读取多少次a
,其中有多少次是在第一个值之前读取了多少次,小于2),但是要继续以您已经选择的样式:
在while(ntestcase--)
的主体末端添加另一个for
环路在不做其他事情的情况下消耗其余的迭代输入。从输入中消耗n - i
值,然后,您将准备好进行while(ntestcase--)
的下一次迭代。
例如,这可能会奏效:
int how_many_to_discard = n - i;
for (int j = 0; j < how_many_to_discard; ++j)
{
cin >> a;
}
,或者如果您不想向任何可能想调试代码的人赠送太多线索,则循环可以是
for ( ; i < n; ++i)
相关文章:
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 套接字读取后,我在缓冲区中看到意外输入
- 从标准输入读取文件后读取用户输入
- C++ 从标准输入读取文件名
- 从标准输入读取多个类型时出现问题
- 使用 fgets() 从键盘读取时从以前的输入读取换行符
- 从标准输入读取时zmq_poll不侦听信号
- 从超强的AndroidAudioIO输入读取缓冲区
- 如何实现将用户输入读取到提供的所有变量中的可变参数模板
- 如何使用重定向的标准输入读取文件,即cin(注意:不使用ifstream)
- 将空格分隔的输入读取到C++中的数组中
- Win32 - 从标准输入读取超时
- 从标准输入读取输入,并准备接收来自服务器的广播
- 终止将输入读取到int中的内容
- 如何从标准输入读取输入,直到按下空格或选项卡
- DirectX 11输入读取方法
- 将输入读取到动态大小的数组中