【问题标题】:I have to write a program which accepts n number of integers and display the degree of the array [closed]我必须编写一个程序,它接受 n 个整数并显示数组的度数 [关闭]
【发布时间】:2021-12-24 06:17:15
【问题描述】:

过去一小时我一直在尝试编写此代码,但我不断收到“分段错误”。我对C还是很陌生,所以请不要太苛刻。有人可以帮忙吗?

这是我的代码:

输入:4 2 4 2 2 5 6 输出:3

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

int degreeOfArray(int arr[], int n)
{
    int maxnum = -100000;
    int currentN = 0;
    int res;
    for(int i = 0; i < n; i++)
    {
        currentN = 0;
        for(int j = 0; j < n; j++)
        {
            if(arr[i] == arr[j])
            {
                currentN++;
            }
        }
        if(currentN > maxnum) /*if the current is greater than max, current is max*/
        {
            maxnum = currentN;
            res = arr[i];
        }
    }
    return res;
}

int main(int argc, char**argv)
{
    argv++;
    int n = argc - 1;
    int arr[n];
    for(int i = 0; i < n; i++)
    {
        arr[i] = atoi(argv[i + 1]);
    }
    printf("%d\n", degreeOfArray(arr, n));
}

【问题讨论】:

  • 程序的输入是什么样的?
  • 我的错,输入:4 2 4 2 2 5 6 输出:3
  • argv[i + 1]... 但你之前已经做过argv++
  • 请在您的问题中包含它,并显示您在运行程序时遇到的确切错误
  • 我应该删除 argv++ 吗?

标签: c segmentation-fault


【解决方案1】:

这有点淘气:

int main(int argc, char**argv)
{
    argv++;
    int n = argc - 1;
    int arr[n];
    for(int i = 0; i < n; i++)
    {
        arr[i] = atoi(argv[i + 1]);
    }
    printf("%d\n", degreeOfArray(arr, n));
}
  • Argc 为 4。
  • 你增加了 argv(这很淘气)。
  • n 是 3。
  • arr 的值为 [0] 到 [2]
  • 你从 0..2 开始循环(这很好)
  • 你设置 arr[i] 就好了,但是调用 atoi(argv[i+1]) 是个问题。

I 将达到 2。所以你点击了argv[3]。如果你没有增加argv,那会很好。

所以要么去掉那里的i+1,要么不增加argv

【讨论】:

  • 所以我将 atoi(arg[i + 1]) 更改为 atoi(arg[I])。它不再给我分段错误,而是打印 2 而不是正确答案 3。
  • 为什么你认为它应该打印 2?您正在打印最大的 NUMBER,而不是该数字的 COUNT。
猜你喜欢
  • 2013-09-16
  • 2023-02-25
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 2021-12-01
  • 1970-01-01
相关资源
最近更新 更多