【问题标题】:Kattis - Odd Man Out - Segmentation FaultKattis - Odd Man Out - Segmentation Fault
【发布时间】:2016-05-31 01:22:22
【问题描述】:

请注意,这个问题是家庭作业。

使用下面的代码,我在 Kattis 网站上为这个问题输入数据。代码可以编译,但是,在“Partygoers #:”printf 之后出现分段错误,我不知道为什么。请帮忙!

在 Kattis 中,问题的描述基本上是:有很多参加派对的人,你意识到有人不应该在这里,因为你把所有的邀请都发给了情侣。每个参加派对的人在他们的邀请上都有一个与其他人相匹配的代码。找出奇怪的人。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int N,i,n,j,a,count=0,num=1;
    int guest[1000],cas[1000];
    scanf("%d",&N);
    printf("Initial N: %dn",N);

    while(N!=0)
    {
        printf("While #: %dn",N);
        scanf("%d",&n);
        printf("Number of Partygoers: %dn",n);
        for(i=0;i<n;i++)
        {
            scanf("%d",guest[i]);
            printf("Goer's Id: %dn",i);
            guest[i]=cas[i];
        }

        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(cas[i]==guest[j])
                {
                    printf("Is Equaln");
                    if(count==2)
                    {
                        break;
                        i++;
                        j=0;
                        printf("Count Equaln");
                    }

                    count++;
                    j++;
                }
                else
                {
                    printf("Case #%d: %dn",num,cas[i]);
                }
            }
        }
        N--;
        num++;
    }
    return 0;
}

【问题讨论】:

  • 下次请正确格式化您的代码!

标签: c arrays segmentation-fault nested-loops


【解决方案1】:

scanf 需要一个指针,而您正在传递一个值。

改变

scanf("%d",guest[i]);

scanf("%d",&guest[i]);

还有一个问题,你得到一个带有scanf 的值,但是你用一个未初始化的值(垃圾)覆盖了这个值:

for(i=0;i<n;i++){
   scanf("%d",&guest[i]);
   printf("Goer's Id: %d\n",i);
   guest[i]=cas[i]; /* cas[i] is used uninitialized */
}

你的意思是cas[i]=guest[i];

【讨论】:

  • 哇!鸡蛋在我脸上!非常感谢!
  • 鸡蛋在你脸上?哈哈哈,咖啡不够,不客气;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
相关资源
最近更新 更多