2014-01-27 5 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 и дает мне эту ошибку. Что я могу сделать?«Программный принятый сигнал SIGSEGV, ошибка сегментации» в программировании на C

ответ

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

должен быть

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

То же самое относится и для последующего кода, который устанавливает k.

Вам необходимо передать адрес любых переменных, которые вы хотите получить scanf.

Как отмечает PaulR, ваш компилятор может предупредить вас о таких ошибках, если вы включите предупреждения (-Wall для gcc, /W4 для MSVC). Делать это для вашей программы будет сообщили

предупреждение: формат '% d' ожидает аргумент типа 'INT *', но аргумент 2 имеет тип 'Int' [-Wformat]

. .. который поможет вам самим диагностировать проблему.

+3

+1: и, возможно, обратите внимание, что gcc и некоторые другие компиляторы поймали бы эту ошибку, если были включены только предупреждения ... –

+1

@PaulR Очень хороший piont. Я обновил это сейчас. – simonc

Смежные вопросы