2017-08-26 188 views
-2

本週我已經開始學習C語言,在C語言編程中我是全新的,當我嘗試這樣做時,控制檯中的這個錯誤一直顯示出來。分段錯誤(核心轉儲)C

#include <stdio.h> 
#include <stdlib.h> 

float calc(float *sall, float *salb) 
{ 
    float hraula, insspc; 
    int naula; 
    printf("Digite o valor da hora-aula e o numero de aulas dadas:"); 
    scanf("%f%i", hraula, naula); 
    printf("Digite a porcentagem do inss retirada do salário:"); 
    scanf("%f",insspc); 
    *salb = hraula * naula; 
    *sall = *salb * ((100 - insspc)/100); 
    return 0; 
} 

int main() 
{ 
    float salbt, sallq; 
    calc(&sallq, &salbt); 
    printf("O salário bruto é: %f R$, liquido: %f R$", salbt, sallq); 
    return 0; 
} 

好希望有人能幫助我,謝謝!

+0

您是否嘗試過一步步調試程序? – tisaconundrum

+0

啓用編譯器警告。 – tkausl

回答

3
scanf(" %f%i", hraula, naula); 
scanf(" %f",insspc); 

它應儘可能的scanf要求指針變量:

scanf(" %f%i", &hraula, &naula); 
scanf(" %f",&insspc); 
+0

非常感謝你! – Azodiaks

+1

請注意,這裏不需要前導空格,因爲'f'轉換說明符已經跳過前導空格字符。 –

0

傳遞一個指針到接收變量是這樣的:

scanf("%f%i", &hraula, &naula); 

同樣

scanf("%f", &insspc); 

參考:man 3 scanf

檢查scanf的返回值以確保您已收集正確數量的值也是一種很好的做法。事情是這樣的:

if (scanf("%f%i", &hraula, &naula) != 2) { 
    fprintf(stderr, "Failed to read hraula and naula\n"); 
    return -1; 
} 

,然後檢查calc()返回值:

if (calc(&sallq, &salbt) == 0) 
    printf("O salário bruto é: %f R$, liquido: %f R$", salbt, sallq);