【问题标题】:"Program received signal SIGSEGV, Segmentation fault" in C programmingC编程中的“程序接收信号SIGSEGV,分段错误”
【发布时间】:2014-01-27 17:06:52
【问题描述】:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
  int n ,k, i, j, l;
  double c, s, p, q;
  printf("Sa se dea valoarea n pentru combinari: ");
  if(scanf("%d",n)!=1)
  {
    printf("Date eronate");
    exit(1);
  }

  printf("Sa se introduca k pentru a face numarul de combinari: ");
  if(scanf("%d",k)!=1||k>n)
  {
    printf("Date eronate");
    exit(1);
  }

  s=1;
  p=1;
  q=1;

  for(i=1;i<=n;i++)
    s*=i;

  for(j=1;j<=k;j++)
    p*=j;

  for(l=1;l<=(n-k);l++)
    q*=n-k;
  c=s/(p*q);
  printf("%g",c);

  getch();

  return 0;
}

这是我的程序,该程序必须计算从 n 到 k 的组合,并给我这个错误。我能做什么?

【问题讨论】:

    标签: c


    【解决方案1】:
    if(scanf("%d",n)!=1)
    

    应该是

    if(scanf("%d",&n)!=1)
    //            ^
    

    这同样适用于后面设置k的代码。

    您需要传递您希望scanf 写入的任何变量的地址。

    正如 PaulR 所指出的,如果您启用警告(-Wall 用于 gcc,/W4 用于 MSVC),您的编译器可能会警告您此类错误。为您的程序执行此操作会报告

    警告:格式“%d”需要“int *”类型的参数,但参数 2 有类型'int' [-Wformat]

    ...这将有助于您自己诊断问题。

    【讨论】:

    • +1: 或许请注意,如果仅启用警告,gcc 和某些其他编译器会发现此错误...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多