C++ 如何自动更改分配给变量的值?

C++ 如何自动更改分配给变量的值?,c++,visual-studio-2010,input,cin,C++,Visual Studio 2010,Input,Cin,当我为std::cin>>diff提供输入时它接受输入值,在我输入数组值的那一刻,diff variables值就会改变,并设置数组的4th element的值。 请帮助我哪里出了问题。我尝试过使用fflush(std)。但这对我没有帮助 我正在使用Visual Studio 2010终极版 #include "stdafx.h" #include <stdio.h> #include <iostream> #include <stdlib.h> using

当我为
std::cin>>diff提供输入时
它接受输入值,在我输入数组值的那一刻,diff variables值就会改变,并设置数组的
4th element
的值。 请帮助我哪里出了问题。我尝试过使用
fflush(std)
。但这对我没有帮助

我正在使用Visual Studio 2010终极版

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    int i, num;//[]={0};
    int diff = 0;
    int numset[] = {0};
    int temp, cnt;
    cnt = num = i = 0;
    std::cout << "Enter your number and difference : ";
    //fflush(stdin);
    std::cin >> num ;
    std::cin >> diff;
    cout << "Enter array Elements : \n";
    for(i = 0; i < num; i++)
    {
        cin >> numset[i];
        //fflush(stdin);
    }
    for(i = 0; i < num; i++)
    {
        for(int j = i; j < num; j++)
        {

            if(i == j)
            {
                temp = numset[j];
            }
            else
            {
                if((diff == (numset[j] - temp)) || (((-1)*diff) == (numset[j] - temp)))
                {
                    cnt++;
                }
            }
        }
    }
    cout << cnt << endl;
    system("pause");
    return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
int _tmain(int argc,_TCHAR*argv[]
{
int i,num;/[]={0};
int-diff=0;
int numset[]={0};
内部温度,cnt;
cnt=num=i=0;
std::cout>num;
标准:cin>>差异;
cout>numset[i];
//fflush(stdin);
}
对于(i=0;icout您的访问超出了数组
numset
的界限,因此您的代码具有未定义的行为(UB),任何事情都可能发生。它可能会覆盖堆栈上的变量(就像在您的案例中一样),可能会崩溃,可能会在线订购比萨饼


numset
声明为单元素数组,因此访问
i>0的
numset[i]
将导致UB。您可能应该将
numset
更改为
std::vector
,并使用
push_back()
向其添加数字。

@JoachimPileborg:抛出错误为,数组大小应大于
0
fflush(stdin)
是UB。我确实理解,如果我采用
vector
,事情就会变得简单,但为什么要将数组的
4个元素设置为
diff
变量?@rasmiranjanayak,它可能会覆盖堆栈上的变量(就像您的情况一样)@rasmiranjanayak Undefined行为是未定义的。然而,编译器可能在堆栈变量之间引入了一些填充,因此有单个
int
numset
,然后是12字节的填充,然后是单个int的
diff
。因此,访问
diff
也可以被视为访问
num[4]
,反之亦然。