【问题标题】:Assigning values to two dimensional array in c在c中为二维数组赋值
【发布时间】:2016-02-21 12:17:42
【问题描述】:

我编写了一段代码,用于查找等于所提供参数之一的连续总和。

#include <stdio.h>
#include <string.h>

int main()
{
    //number of test case
    int n;
    int monfri[2];

    scanf("%d",&n);

    char res[n][3] ;
    char yestok[3] = {"YES"};

    int sum = 0;
    int h = 0;

    for(int i = 0 ; i < n; i++)
    {
        h=0;
        //read no of friends and money
        while (h < 2 && scanf("%d", &monfri[h]) == 1)
            h++;

        int fri[monfri[0]];

        for(int j = 0; j < monfri[0]; j++)
            scanf("%d",&fri[j]);


        for(int k = 0; k < monfri[0] ; k++)
        {
            sum = 0;

            for(int l=k+1; l<monfri[0]; l++)
            {
                sum = sum + fri[l - 1];

                if(sum == monfri[1])
                {
                    strcpy (res[i],yestok);
                    continue;
                }

                if(sum > monfri[i])
                    continue;
            }
        }       

        if(strcmp(res[i],yestok) != 0)
        {
            strcpy (res[i],"NO");       
        }

    }

    for(int d = 0; d < n ; d++)
    {
        puts(res[d]);
    }

    return 0;
}

提供相同的输入

2
5 12
2
3
4
5
6
3 15
2
2
2

这里的第一个输入代表我们案例中测试用例的编号,它是 2

下一个输入代表实际的数据数量和总和值。这里是它的

5 12
3 15

预期的输出应该是

YES
NO

但我得到了

YESNO
NO

我做错了什么。如果没有测试用例是 1,那么它工作正常。但在 2 个或更多测试用例中失败。

【问题讨论】:

  • 你试过调试吗?这是一个直接的“请调试我的程序”问题。
  • @bolov 我试过了,但找不到。 strcmp 和其他东西看起来都很好,条件也还可以。
  • 至少调试会缩小你对错误来源的怀疑。

标签: c arrays gcc char


【解决方案1】:

字符串“YES”需要 4 个字符的空间。因此,您必须将yestok 的声明更改为

char yestok[4] = {"YES"};

甚至更好,让编译器确定长度:

char yestok[] = {"YES"};

否则,终止 NUL 字符会丢失,您的程序会调用未定义的行为。例如,strcmp 调用可能会失败。

【讨论】:

  • @MarthinZabel 感谢您的解释,这里的strcmp 似乎没问题。我得到了预期的结果。但正如你所说,由于未定义的行为,它实际上会打印到它得到'\ 0'。因此我无法弄清楚。
猜你喜欢
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 2017-01-29
相关资源
最近更新 更多