阵列输入在按Enter成为0
Array input after pressing enter becoming 0
#include <iostream>
using namespace std;
int main() {
int start_time[3];
int final_time[3];
int i;
for(i=0;i<3; i++)
cin >> start_time[i];
for(i=0;i<3;i++)
cin >> final_time[i];
int a[10];
for(i=0;i<=10;i++)
a[i]=0;
for(i=0;i<3;i++){
cout << start_time[i] << " " << final_time[i] << endl;
}
}
如果我给出以下输入:
23 53 09
23 53 10
我们看到输出为:
23 0
53 53
9 10
为什么在我按Enter?
之后,最终_time的启动输入等于0如何解决此问题?
int a[10];
for(i=0;i<=10;i++)
a[i]=0;
在这一部分中,您将0
写入a[10]
。但是a[10]
不存在。a[]
只有10个整数的空间,索引为0到9。因此,您将记忆中的某个地方写为零,然后偶然地覆盖final_time[0]
。本来可以是别的东西,或者也可能崩溃了您的程序。
通过像其他循环一样将循环纠正到for(i=0;i<10;i++)
来解决此问题。
从分配的界限中写入数组是C 中的不确定行为。这基本上意味着它未在标准中定义,每个编译器供应商都必须为他们的产品弥补一些事情,如果您这样做应该会发生什么。因此,它是相当随机的,因此很差(TM)。切换编译器时,您可能会得到不同的行为,重新启动程序时甚至可能会得到不同的行为。就您而言,您的编译器供应商(像许多其他人一样)决定他们只是不检查开发人员是否正确。他们只是将a[10]
在内存中的空间中写入零,如果它存在。但事实并非如此。从很明显的情况下,该位置在内存中有另一个变量。这样一个人的价值被零覆盖。
您正在通过无界索引来调用不确定的行为,以征集数组a
for循环
for(i=0;i<=10;i++)
~~~
应使用i < 10
到10元素的0到9索引
相关文章:
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 修复完成输入后重复"enter names of teacher"?
- 提升库,使其成为C++标准
- 使第二个类的构造函数成为第一个类中的友元函数
- 如果我注释掉换行符,为什么'string'会成为一个不合格的变量
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 实现使用模板化类而不使原始类成为模板的类
- 在 wxWidgets 中的 wxTextCtrl 上手动触发 ENTER 键按下事件C++?
- C++定义构造函数使对象成为非 POD
- 何时使函数成为类成员函数C++?
- 我如何使它,无论用户用空白字符串按 Enter 多少次,它总是打印"开始"字符串?
- 为什么使操作员成为新的专用会打破 std::shared_ptr?
- 对使用 CMake 生成为 lib .a 的方法的未定义引用
- 如何使模板化类成为另一个模板化类的好友
- 如何使用 cin 使 c++ 成为可选?
- 如何使替换 c 函数的变量名成为错误?
- C++:让函数成为多个类的朋友?
- 对象如何成为子对象
- 阵列输入在按Enter成为0