【发布时间】:2017-07-26 11:30:23
【问题描述】:
我对 c++ 有点陌生,但在 python 和 c# 方面已经更深入了,我不记得发生过这样的事情。我试图计算一个数组中有多少个正数、负数和零,但计数会以某种方式跳到 4198321 左右,但它略有不同。那么为什么会发生这种情况以及导致它发生的原因是什么?我无法在网上找到任何答案。 代码:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
long n, pos, neg, zer;
cin >> n;
vector<int> arr(n);
for(int arr_i = 0;arr_i < n;arr_i++){
cin >> arr[arr_i];
}
for(int i; i < n; i++)
{
if(arr[i] > 0)
{
pos++;
cout << "pos now is: " << pos << endl;
}
else if(arr[i] < 0)
{
neg++;
cout << "neg now is: " << pos << endl;
}
else if(arr[i] == 0)
{
zer++;
cout << "zer now is: " << pos << endl;
}
}
cout << "pos: " << pos << endl;
cout << "neg: " << neg << endl;
cout << "zer: " << zer << endl;
return 0;
}
抱歉,如果我花了太长时间才说到重点,这是我提出的第一个问题。输出(如果需要)是:
neg now is: 4198320
pos now is: 4198321
neg now is: 4198321
zer now is: 4198321
pos now is: 4198322
pos now is: 4198323
pos: 4198323
neg: 4
zer: 1
【问题讨论】:
-
pos未初始化。使用它的是UB。 -
What happens to a declared, uninitialized variable in C? Does it have a value? 的可能重复项(是的,我知道这是针对 C 的,但它也适用于这里)如果您愿意,可以再举一个例子:Uninitialized variable behaviour in C++不保证另一个问题;尝试阅读基础教材。充满统一变量的代码 => UB
-
@underscore_d 它忽略了 C++ 的细微差别。就像如果对象有一个构造函数,它将被默认构造,
-
@NathanOliver 公平点,尽管不适用于这些基本类型。我敢肯定 C++ 有更好的骗局!