我的代码C ++在IDE中有效,但在hackerrank中无效

问题描述

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int n;
    cin >> n;
    int a[n];
    for(int i = 0; i < n; i++) {
        cin >> a[i];
    }
    int res,k = 0;
    for(int i = 0; i < n; i++) {
        int x,y = 0;
        for(int j = 0; j <= i; j++) {
            x += a[j];
        }
        for(int j = n-1; j > i; j--) {
            y += a[j];
        }
        if(res > abs(x-y)) {
            res = abs(x-y);
            k = i+1;
        }
        x = 0;
        y = 0;

    }
    cout << k;
}

我的代码在Visual Studio代码中工作正常,但在hackerrank中显示此错误

Solution.cpp: In function ‘int main()’:
Solution.cpp:22:9: warning: ‘res’ may be used uninitialized in this function [-Wmaybe-uninitialized]
         if(res > abs(x-y)) {
         ^~

很明显,我已经定义了res变量,我在哪里做错了?

解决方法

要将resk都初始化为0,您需要执行以下操作:

int res = 0,k = 0;

int res = 0;
int k = 0;

但不是

int res,k = 0;

错误告诉您,在声明res的同时,有可能在将其设置为某个值之前尝试使用它。

,

hackerank所说的是真的,您在res比较中使用if(res > abs(x-y))进行初始化。 实际上,您只声明它,而不在使用前初始化它。 如果您的IDE中的编译器未显示该错误,则可能默认情况下具有一些抑制这些警告类型的选项。

,

在下面的语句中使用它之前,您需要设置或初始化res。

if(res > abs(x-y)) {
            res = abs(x-y);
            k = i+1;
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...