c - 为什么这里会出现“被零除”?
问题描述
我一直在尝试使用该程序查找给定数字的长度,但是每次运行它时都会出现以下错误:
check_length.c:16:26:运行时错误:除以零
#include <cs50.h>
#include <stdio.h>
void check_length(long);
int main(void)
{
long c = get_long("Enter Number: ");
check_length(c);
}
void check_length(long w)
{
for(int i=1;i<=16;i++)
{
int scale = w/((10)^i);
if (scale<10 && scale>0)
{
int length = i+1;
printf("%i\n",length);
}
}
}
解决方案
简单的答案是操作员^
没有按照您的期望进行操作。您似乎希望它提高 10 的幂,i
但^
实际上是按位 XOR 运算符。
所以当i
是 10 时,你做10 XOR 10
的就是零。因此除以零。
你可以看看这个pow
函数,但为什么要让事情变得复杂呢?
只需继续潜水 10 直到你得到零,然后返回分区数。
对于非负值是这样的:
#include<stdio.h>
int check_length(unsigned long w)
{
int result = 0;
while (w > 0)
{
++result;
w = w/10;
}
return result;
}
int main()
{
printf("%d\n", check_length(0));
printf("%d\n", check_length(9));
printf("%d\n", check_length(10));
printf("%d\n", check_length(1234567890));
return 0;
}
输出:
0
1
2
10
推荐阅读
- asp.net - Asp.Net HttpPostedFile.SaveAs 失败:访问被拒绝
- python - 从 Neuralcoref 的网站获得不同的结果?
- c# - 如何从 datagridview 和文本框更新表格
- java - Java:如何巧妙地为 200 个字段创建数据映射器实用程序,而不是再次重复相同的检查?
- xml - XML 解析:bs4 lxml 无法解析文件。xml 更改标题
- c - 使用 C read() 从标准输入读取双精度数
- mongodb - 当我尝试调用 API 时,本地服务器返回“http:panic serving [::1]:52781: runtime error: invalid memory address or nil pointer dereference”
- html - 当我在页面中切换时,为什么整个页面会向上推几个像素?
- javascript - 单击按钮提交 2 个表单并将第 1 个表单的响应传递给第 2 个表单
- php - 实例 php7.2 php-xml, php-soap on aws ec2 instance 在 centos 下运行