#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 的组合,并给我这个错误。我能做什么?
最佳答案
if(scanf("%d",n)!=1)
应该是
if(scanf("%d",&n)!=1)
// ^
这同样适用于后面设置k
的代码。
您需要传递您希望 scanf
写入的任何变量的地址。
正如 PaulR 所指出的,如果您启用警告(-Wall
用于 gcc,/W4
用于 MSVC),您的编译器可能会警告您此类错误。为您的程序执行此操作会报告
warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat]
...这会帮助您自己诊断问题。
关于c - C编程中的"Program received signal SIGSEGV, Segmentation fault",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21387059/