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;i cout您的访问超出了数组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]
,反之亦然。