CodeBlocks和Visual Studio 2019中的不同结果

Different results in CodeBlocks and Visual Studio 2019

本文关键字:结果 2019 Visual Studio CodeBlocks      更新时间:2023-10-16

我用CodeBlocks编写了这个程序:

#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int main()
{
ifstream is;
is.open("game.inp");
int n,a[100];
is>>n;
for (int i=0; i<n; i++)
is>>a[i];
is.close();
int game[100];
int kt=0;
for (int i=0; i<n; i++)
{
for (int j=3; j<a[i]+1; j++)
{
if ((a[i]%j)==0)
{
int *x = find(begin(game),end(game),j); //ktra uoc hien tai da co trong mang hay chua, k co thi ms them
if (x==end(game))
{
game[kt]=j;
kt++;
}
}
}
}
int kq=0;
for (int i=0; i<kt; i++)
{
int d=0;
for (int j=0; j<n; j++)
{
if ((a[j]%game[i])==0)
d++;
}
if (d>kq)
kq=d;
}
ofstream o;
o.open("game.out");
o<<kq;
o.close();
return 0;
}

结果不正确。然后我决定将这些代码复制到Visual Studio 2019,它给了我正确的结果。我不知道发生了什么。我将相同的代码从CodeBlocks复制到VS,结果完全不同。

欢迎来到未定义行为的美妙世界。

在初始化数组之前game使用数组的内容。局部变量未初始化,其内容不确定,使用不确定值会导致未定义的行为。

如果您希望将数组初始化为全零,则需要显式执行此操作:

int game[100] = { 0 };