当我尝试运行代码时,我将第二个输出作为垃圾值。谁能说出该代码中的错误

Posted

技术标签:

【中文标题】当我尝试运行代码时,我将第二个输出作为垃圾值。谁能说出该代码中的错误【英文标题】:When I tried to run the code I was getting the 2nd output as garbage value. Can anyone tell fault in that code 【发布时间】:2015-06-17 07:50:50 【问题描述】:
#include <iostream>

using namespace std;

int main()

int T,i,j,N,K;
cin >> T;
int n[T],x;
for(i=1; i<=T; i++)

    cin >> N >> K;
    for(int j=1; j<=N; j++)
    
        cin >> x;
        n[i]+=x/K;
        x=0;
    N=0;K=0;

    
for(i=1; i<=T; i++)
    cout << n[i] << endl;
return 0;

问题是“您的程序将在一个或多个测试用例上进行测试。输入的第一行将是单个整数 T,即测试用例的数量(1 ≤ T ≤ 100)。然后是测试用例,每个测试用例分为两行。每个测试用例的第一行包含两个整数 N,不同糖果的数量(1 ≤ N ≤ 100)和 K,如上所述,能让孩子开心的糖果的最小数量(1 ≤ K ≤ 100). 每个测试用例的第二行包含 N 个整数,用一个空格分隔,是每种类型的可用糖果数量。每个类型至少有 1 个糖果,最多 100 个糖果类型。”

sample input: 2
3 2
4 5 7
3 8
4 5 7
sample output:
7
0

 when the i tried the above code the answer that i got like: 
 input:2
 3 2
 5 6 8
 2 2
 9 1
 output:
 9
 -880625041

当我尝试运行代码时,我将第二个输出作为垃圾值。谁能告诉我该代码中的错误

【问题讨论】:

你真的应该学会在编译时启用所有警告和调试信息(例如使用g++ -Wall -Wextra -g)以及如何使用调试器和其他工具(例如valgrind等...) 了解更多关于C++ programming,使用其标准containers,如std::vector 【参考方案1】:

问题来了:

 n[i]+=x/K;

这等价于n[i]=n[i]+x/K;,所以它使用n[i]的先验值。但是,您没有为数组n 的元素设置任何先前值。所以,首先将数组初始化为0

      for(i=0;i<T;i++)
         n[i] = 0;

另外,在这段代码中:

  for(int j=1; j<=N; j++)

你确定N 总是小于T 数组的大小吗? (还要注意基于 0 的索引)。

【讨论】:

【参考方案2】:

    C 和 C++ 中的数组是从零开始的。运行从 0 到 N - 1 和 T - 1 的循环。

    在使用数组值之前不要初始化它们。正式地,您的程序行为是未定义的。 (我认为您的意思是 n[i]= 而不是 n[i]+=。)

    int n[T] 这样的可变长度数组是编译器扩展。请记住这一点,因为它可能会影响便携性。

【讨论】:

以上是关于当我尝试运行代码时,我将第二个输出作为垃圾值。谁能说出该代码中的错误的主要内容,如果未能解决你的问题,请参考以下文章

我将如何隔离或仅将第二个元素存储在批处理文件内的 for 循环中?

主要功能未执行我的第二个功能

水平线性布局中两个文本视图的不同重力

将第二个活动的价值保存到第一个活动,而不会丢失更新的数据

将第二个图表添加到 Dash app.layout 的问题

文本字段创建操作而非出口