2014-01-27 28 views
0
#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編程中的「程序接收到的信號SIGSEGV,分段錯誤」

回答

2
if(scanf("%d",n)!=1) 

應該

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

這同樣適用於那臺k以後的代碼。

您需要傳遞您想要寫入的任何變量的地址scanf。如PaulR注意到的,如果啓用警告(對於gcc爲-Wall,對於MSVC爲/W4),編譯器可能會對此類錯誤發出警告。這樣做對你的程序將報告

警告:格式 '%d' 需要類型的參數 '詮釋*',但爭論2 具有類型 '詮釋'[-Wformat]

。這本可以幫助你自己診斷問題。

+3

+1:也許注意,如果只有警告已經啓用,gcc和某些其他編譯器會發生此錯誤... –

+1

@PaulR非常好的piont。我已經更新以覆蓋這一點。 – simonc

相關問題