【问题标题】:Segmentation Fault (Core Dump) C [duplicate]分段错误(核心转储)C [重复]
【发布时间】:2017-08-26 00:27:08
【问题描述】:

这周我开始学习 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;
}

希望有人能帮助我,谢谢!

【问题讨论】:

  • 你试过一步步调试你的程序吗?
  • 启用编译器警告。

标签: c


【解决方案1】:
scanf(" %f%i", hraula, naula);
scanf(" %f",insspc);

应该是 scanf 需要指向变量的指针:

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

【讨论】:

  • 哦,非常感谢!
  • 请注意,这里不需要前导空格,因为f 转换说明符已经跳过了前导空白字符。
【解决方案2】:

指针 传递给接收变量,如下所示:

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);

【讨论】:

    猜你喜欢
    • 2016-01-08
    • 2019-03-14
    • 1970-01-01
    • 2022-01-14
    • 2017-02-25
    • 2016-07-12
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多