gpt4 book ai didi

c++ - 回车后数组输入变为0

转载 作者:行者123 更新时间:2023-11-30 03:36:20 29 4
gpt4 key购买 nike

#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

为什么我按回车后,final_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]如果它存在,在。但事实并非如此。很巧的是,内存中的那个位置还有另一个变量。所以那个人的值(value)被零覆盖了。

关于c++ - 回车后数组输入变为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40779442/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com