【问题标题】:why segmentation error in my program为什么我的程序中有分段错误
【发布时间】:2017-03-02 21:50:44
【问题描述】:
#include<stdio.h>
int main()
{
    int num[5], i, s, no;
    for(i=0; i<5 ;i++)
    {
        scanf("%d",&num[i]);
    }
    printf("enter a number\n");
    scanf("%d", &no);
    s=search(no, &num[0]);
    printf("%d\n",s);
    search1(no,num);
}

int i=0;

int search(int no,int *num[i])
{
    int x,i;
    for(i=0;i<5;i++)
    {
        if(no == *num[i])
        return 1;
    }
    return 0; 
}

int search1(int no,int *num)    
{ 
    int i,x,k; 
    printf("your number %d is present in the list",no);
    printf("number\tfrequency");
    for(i=0;i<5;i++)
    {
        for(x=0;x<i+1;x++)
        {
            k=0;
            if(num[i]==num[x] &&i!=x)
            {
                k=0;
                break;
            }
            else
            {
                k=1;
                continue;
            }
        }
        if(k==1) {
            printf("%d",num[i]);
        }
    }
} 

这个问题基于将数组传递给函数。我的代码正在编译,但在运行时询问输入数字后,为了检查它在列表中的存在,它显示分段错误。

【问题讨论】:

  • 你有一个全局变量i,你有很多局部变量i,完全隐藏了全局变量。这不好。
  • 其他人很难阅读您的代码。在您多写 一个 行代码之前,请采用公认的格式样式。在我看来,你呈现代码的方式反映了你的思维方式:随意的格式化~解决方案的随机方法。
  • ...也许你的想法在你打字之前,但刚性格式样式的另一个优点是它允许你在准备代码时有时间考虑和审查这些想法。
  • @WeatherVane 我编辑了他的问题等待批准...他的代码有多个问题。
  • @TonyTannous 已批准。

标签: c


【解决方案1】:

将您的搜索函数声明更改为:

int search(int no,int *num)

改变你访问数组元素的方式:

if (no == num[i]) // Instead of *num[i]

然后这样称呼它:

s=search(no,num)

我认为您对数组、指针和参数传递有些困惑。 此外,正如您问题下方的 cmets 已经指出的那样,您应该采用更好的编码风格。你的代码真的很难阅读。

这可能是一个很好的起点: https://www.kernel.org/doc/Documentation/process/coding-style.rst

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2018-09-22
    • 2011-05-06
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多