按回车键时返回 cin 的值不为 0
Return value of cin not 0 upon pressing Enter
#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
后循环也会继续。在所有编译器上按键盘上的ENTER
时,while
循环的条件不应该是假的吗?
是否有任何解决方法或任何其他方法可以在不知道数组大小的情况下获取数组输入?
Enter键告诉终端将输入发送到您的程序,而不是其他任何内容。如果要终止输入,则需要发送文件结束字符。
在POSIX系统(如Linux和macOS(上,文件结尾通常是Ctrl-D,在Windows上通常是Ctrl-Z(在空行上,之后可能按Enter键(。
正如您应该从上面猜到的那样,这与编译器无关,而是与环境(最显着的是操作系统(有关。
稍微相关的说明是,您的代码
用于在事先不知道数组大小的情况下获取数组输入
存在严重缺陷。如果用户输入的值超过 100 个,会发生什么情况?然后你会越界。
最好尽快了解std::vector
。
也许在这段代码下面会有所帮助
#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]
,那么您的逻辑或更高程序将不起作用并进入无限循环
相关文章:
- C++中的cin.ignore()函数不适用于整个流
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- Problems with std::cin.fail()
- 由cin中的字符串中未捕获空白引起的分割错误
- 在C++中使用Cin,我如何在1行中输入
- 将 cin 限制为只有一个
- cin >> int 给定一个字符串将 int 赋值为 0
- istream std::cin如何修改自定义istream缓冲区
- C++ 将 CIN 值存储到任何类型的数组中
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- cin 的十进制输入验证?
- Turbo C++ cin() 不能与 gets() 一起使用
- 使用 cin 时接受小数点后的 2 位数字
- 在 std::getline 和 std::cin 期间卡在循环中
- 我无法在Visual Studio代码中使用CIN输入答案,它说输入您的年龄,但它说只读文本编辑器如何解决这个问题?
- 为什么我的两个 cin 语句没有在程序结束时运行?
- C++ cin.ignore() 跳过循环
- CIN是逻辑1还是0?
- cin.get() 之后的回车;C++
- 退出带有回车符的 while(cin >> s) 循环