按Enter键后,cin的返回值不为0

时间:2018-06-16 18:51:58

标签: c++

#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
    int i=0;
    int a[100];

    while(cin>>a[i]){i++;}
    cout<<i;

    return 0;
}

此代码用于在不知道其大小的情况下获取数组输入。请注意,我使用了a[100],因为给出了边界并且元素的数量不超过100。

除了Code :: Blocks之外,所有编译器都能正常工作,即使在按下ENTER之后循环也会继续。在所有编译器上按键盘上的while时,ENTER循环的条件是否应该是假的?

对于这种或任何其他方式获取数组输入是否有任何解决方法而不知道它的大小?

2 个答案:

答案 0 :(得分:2)

Enter 键告诉终端将输入发送到您的程序,没有别的。如果要终止输入,则需要发送文件结束符。

在POSIX系统(如Linux和macOS)上,文件结尾通常是 Ctrl-D ,在Windows上它通常是 Ctrl-Z (在一个空行,可能按后输入

正如您应该从上面猜到的,这与编译器无关,而是与环境(最值得注意的是操作系统)无关。

稍微相关的说明,您的代码

  

用于在不知道其大小的情况下获取数组输入

严重缺陷。如果用户输入的值超过100,会发生什么?然后你会走出界限。

快速了解std::vector

答案 1 :(得分:0)

也许在此代码下面会有所帮助

#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
int i=0;
int a[100];

while(cin>>a[i]){
    i++;
    if(cin.get()=='\n') break;
}
cout<<i;

return 0;
}

在这里你必须要知道用户输入是否会输入超过100的值 根据您的数组a[100],您的逻辑或以上程序将无法工作并进入无限循环