所以,我正在研究C中的代码,用于计算给定数字的长度。我现在知道正确的方法来解决这个问题。但是,我不明白为什么我的原始代码是错误的。有人可以帮我调试吗?
编辑:我也想知道为什么while中的参数应该是“dgts!= 0”或“dgts> 0”?比如,你能解释一下这意味着什么以及它有意义吗?
#include <stdio.h>
#include <cs50.h>
int lngth (int dgts);
int main(void){
int num = get_long_long();
int length = lngth(num);
printf("%i",length);
}
int lngth (int dgts){
int cnt = 0;
int y = dgts;
while (dgts !=0 ){
y = y/10;
cnt ++;
printf("%i\n",cnt);
}
return cnt;
}
答案 0 :(得分:0)
正如Jean-FrançoisFabre在评论中所提到的,你在int lngth (int dgts)
函数中创建了一个无限循环:
while (dgts !=0 ){
y = y/10;
...
}
由于条件dgts != 0
依赖于dgts而不是y
,y
是y = y/10
的变化,因此循环永远不会完成。
答案 1 :(得分:0)
代码有两个问题:
while (dgts !=0 ){ y = y/10; cnt ++; }
dgts
的无限循环永远不会改变,因此一旦代码进入循环,它就会卡在那里。 @Jean-François Fabre
dgts == 0
时的可疑安排,因为它通常是一位数字而不是无数字。 do
循环是一个简单的解决方案。
修复代码:
int lngth(int dgts) {
int cnt = 0;
do {
cnt++;
printf("%i\n", cnt);
dgts /= 10;
} while (dgts); // while dgts is non-zero
return cnt;
}
给定数字的长度正在研究小数位数的概念。如果长度包含'-'
的负数,则只需要进行少量更改。
// int cnt = 0;
int cnt = dgts < 0;
答案 2 :(得分:0)
while循环条件中存在拼写错误
while (dgts !=0 ){
^^^^^^^^
我认为你的意思是
while (y !=0 ){
^^^^^
但无论如何,该函数是错误的,因为它的参数可以等于0
而0
是一个包含一位数的有效数字。
将返回类型定义为int
也没有意义,因为数字的长度不能为负值。
该功能可以看起来像
unsigned int lngth ( int dgts )
{
const int Base = 10;
unsigned int cnt = 0;
do
{
++cnt;
} while ( dgts /= Base );
return cnt;
}
主要是你应该写
unsigned int length = lngth(num);
printf("%u\n", length );
还要考虑函数get_long_long
似乎返回long long int
类型的整数。
如果是,那么你应该写
long long int num = get_long_long();
在这种情况下,应该声明函数
unsigned int lngth ( long long int dgts );
请注意,没有理由声明dgts
或lngth
等标识符。使用完整的单词。例如
unsigned int length ( long long int number );
^^^^^^ ^^^^^^
或者只是
unsigned int length ( long long int n );
^^^^^^ ^^^