我目前刚刚开始学习 C(因为 PHP 和相关语言更多地是我的领域),所以我想我会从一个挑战开始。
我决定加入 CodeChef 并尝试他们的简单练习挑战之一,但显然我的代码在运行时出现 SIGSEGV 错误。
您能否检查我的代码以了解我收到此错误的原因,该代码在我尝试过的多个机器上运行良好(Mac OSX、Linux(CentOS 和 Ubuntu))。
这是代码:
#include <stdio.h>
#include <stdlib.h>
#ifndef BANK_CHARGE
#define BANK_CHARGE 0.5
#endif;
int main (int argc, char **argv){
// if(argc != 3){
// printf("Usage: %s [int] [float]\n", argv[0]);
// exit(1);
// }
int withdraw = atoi(argv[1]);
float balance = atof(argv[2]);
if((withdraw % 5) != 0){
printf("%.2f", balance);
exit(1);
}
if(withdraw > 2000 || withdraw == 0){
printf("%.2f", balance);
exit(1);
}
float totalWithdraw = (withdraw + BANK_CHARGE);
if(totalWithdraw >= balance){
printf("%.2f", balance);
exit(1);
}
printf("%.2f", balance - totalWithdraw);
return 0;
}
挑战位于此处: http: //www.codechef.com/problems/HS08TEST
但这里是问题摘要:
此问题的所有提交都是可用的。
Pooja 想从 ATM 取款 X 美元。取款机只接受X为5的倍数,且Pooja账户余额有足够现金进行取款交易(包括银行手续费)的交易。对于每次成功取款,银行收取 0.50 美元的费用。
尝试交易后计算 Pooja 的账户余额。输入
正整数 0 < X <= 2000 - Pooja 希望提取的现金数量。
非负数 0<= Y <= 2000,精度为两位数 - Pooja 的初始账户余额。输出
在尝试交易后输出账户余额,以两位精度的数字形式给出。如果账户里没有足够的钱来完成交易,输出当前的银行余额。示例 - 成功的交易
输入:30 120.00
输出:89.50
示例 - 提款金额不正确(不是 5 的倍数)
输入:42 120.00
输出:120.00
示例 - 资金不足
输入:300 120.00
输出:120.00