如果在里面,而错误
If inside while error
int main()
{
vector<int>numbers;
int numb = 0;
int i = 0;
int j = i - 1;
while (cin >> numb)
{
if (numb == numbers[j]) HERE IS THE PROBLEM!*
{
cout << "Numbers repeatedn";
}
numbers.push_back(numb);
cout << "numbers[" << i << "] = " << numbers[i] << endl;
++i;
}
/*** 我不明白为什么异常、运行时错误、中断或任何它命名的东西......
在循环的第一次迭代中,j
为 -1。访问numbers[-1]
是未定义的行为,因为索引在向量边界之外。
事实上,在向量中放入某些内容之前,访问任何索引都是越界的,因此在至少调用push_back
一次之前,您根本无法索引numbers
。
如果用户输入向量中已有的数字,此代码将显示消息:
while (cin >> numb) {
vector<int>::iterator found = std::find(numbers.begin(), numbers.end(), numb);
if (found == numbers.end()) {
cout << "Numbers repeated" << endl;
}
// If you don't want duplicate numbers in the vector, move this statement
// into an "else" block on the last "if" block.
numbers.push_back(numb);
}
另一方面,此代码仅在数字与最后一个输入的数字相同时显示消息,也就是说,如果序列号相同:
while (cin >> numb) {
if (!numbers.empty() && numb == numbers.back()) {
cout << "Numbers repeated" << endl;
}
numbers.push_back(numb);
}
您需要使用初始数据初始化数字向量,或者检查以确保 j 在向量大小内。向量本质上是一个数组,像任何数组一样,你不能越界。
if (j < numbers.size() && numb == numbers[j]) HERE IS THE PROBLEM!*
{
cout << "Numbers repeatedn";
}
相关文章:
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- g++的分段错误(在NaN上使用to_string两次时)
- 错误:在为指针赋值时,void值没有被忽略
- 错误:在"生成字符串"之前应为";"
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 获取 clang++:错误:在编译文件系统库的代码时
- C/C++ 取消引用错误:在空检查之前取消引用
- 发生此错误:在0x0F2BFB7C(基于.dll)时引发异常 尝试更改大小是问题吗?
- JNI 在应用程序中检测到错误:在为 innerclass 调用 NewObject 时使用了无效的 jobject
- Extern "C"错误在'int'之前'asm'或'__attribute__'
- 这个 absl::StrCat 错误在哪里发生,在 Abseil 或 MSVC 中?
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 错误:在 { } [-缩小] 中将"199"从"int"到"char&
- ioctl错误在SPI传输函数中返回-1 EINVAL
- C++错误:在类中取消对main的定义引用
- 错误在哪里,为什么这个程序是错误的?
- 链接器错误-在ubuntu中找不到CMake和Cuda 10.1的lcudart
- 为什么在编译此代码时会出现此错误?(在~之后调用terminate)
- 如果在里面,而错误