c - 在c中取消引用指针时遇到问题
问题描述
我的体育运动更好一些,我发现自己从许多体育博彩中常见的赔率赔率中手动计算小数赔率。我正在尝试编写一个程序,该程序至少可以消除一遍又一遍地计算的负担。
我的程序是一个将输入“team-one moneyline-teamone team-two moneyline-teamtwo”并输出带有小数赔率的团队名称的程序,如下所示:
输入:公羊 +230 Bucs -280
我尝试过处理取消引用的所有排列,但似乎无法阻止它给出分段错误。
#include <stdio.h>
#include <stdlib.h>
void calcML(int a, float *b, float *c);
int main (int argc, char* argv[])
{
int oneML, twoML;
float oneDF, oneDA, twoDF, twoDA;
oneML = atoi(argv[2]);
twoML = atoi(argv[4]);
printf("Team one is %s with a ML of %i.\nTeam two is %s with a moneyline of %i.\n", argv[1], oneML, argv[3], twoML);
calcML(oneML, &oneDF, &oneDA);
calcML(twoML, &twoDF, &twoDA);
printf("%s %f %f\n", argv[1], oneDF, twoDA);
printf("%s %f %f\n", argv[3], twoDF, oneDA);
}
void calcML (int a, float *b, float *c)
{
if (a < 0){
int tmp = -a;
*b = 1 + tmp/100;
*c = 100/tmp;
}
else {
*b = 1 + a/100;
*c = 100/a;
}
}
如上所述,我希望输出为:
Team one is Rams with a ML of +230.
Team two is Bucs with a ML of -280.
Rams 3.30 3.80
Bucs 1.36 1.43
现在的输出是:
Team one is Rams with a ML of +230.
Team two is Bucs with a ML of -280.
Segmentation fault
就像我说的,我知道这是一个指针算术问题,但我尝试了一百万种不同的排列,但无法弄清楚。感谢任何不介意指出我愚蠢错误的善良灵魂!
解决方案
我无法重现段错误,但正如其他人提到的那样,您似乎不小心截断了任何浮点值。在calcML
,当您执行时1 + tmp/100;
,编译器通过强制tmp
转换为整数来“帮助您”。这是clang 10.0.1
在 MacBook 上使用的。我想改变1
to1.0
和100
to100.0
将有助于澄清一些数学问题。据我所知,您的指示至少看起来都是正确的。
推荐阅读
- python - 如何获得从顶部 discord.py 开始的命令
- python - Python,如何连接2个相同值的字符串,0
- python - 有什么方法可以使用 Discord.py 流式传输视频吗?
- postgresql - PostgreSQL:使用复合索引进行选择和排序
- python - mddropdownmenu 中的文本没有显示出来... kivymd
- ruby - 为什么 Ruby 对异常消息和回溯有不同的引号?
- python - 我怎样才能从这个电话马拉松代码中只得到“消息”?
- c - 解析 HTML GET 请求的简单函数 - C 并逐行打印
- javascript - 刷新直到警报消失
- properties - 如何在 YML 值中添加/使用冒号“:”?