出了點問題。我正在嘗試制作一個可以計算任何自然數的數字計數的 cade。就像 2 的數字計數是 1,30 是 2,456 是 3。我的代碼運行的是 1 位數,但不是兩位數。
#include<stdio.h>
void main(void)
{
int num,count,check;
float div;
printf("Enter a natural number\n");
scanf("%d", &num);
while (num<=0)
{
printf("Error\n");
printf("Enter a number\n");
scanf("%d", &num);
}
while(num>1)
{
count=1;
check=10;
div=num/check;
if(div<=1)
{
printf("Number count is\n%d", count);
break;
}
check = check*10;
count = count 1;
}
}
uj5u.com熱心網友回復:
是時候學習使用除錯器了。使用它會立即顯示代碼中的主要問題:您重置了回圈內部count的值。因此,如果您輸入一個大于或等于 10 的數字,您將進入一個無限回圈,因為您將始終將該數字除以 10 并發現結果 >= 1!check
還有另一個不太重要的問題:你if(div<=1)應該在什么時候使用if(div<1). 因為 10/10是1 并且有 2 位數字...
在這些修復之后,您應該擁有:
...
check = 10;
count = 1;
while (num > 1)
{
div = num / check;
if (div < 1)
{
printf("Number count is\n%d", count);
break;
}
check = check * 10;
count = count 1;
}
return 0; // main shall return an int value to its environment...
}
它正確地給出了正整數的小數位數。但是正如您在評論中所說,您應該始終測驗的回傳值scanf(例如,用戶無意中鍵入 at而不是5什么?)。
話雖如此,這個答案旨在向您展示問題所在,但凱恩斯的解決方案更好......
uj5u.com熱心網友回復:
您的解決方案的問題是,在回圈結束時修改和之后check,它們在每個段落的回圈開始處分別count重新宣告為1和。
您需要在 while 回圈之前移動宣告。
也不需要給出這個數字的小數部分是不相關的。您還可以通過直接替換和使用來
使用更少的變數,而不是將結果臨時存盤在.10divfloatcheck10numdiv
我認為這可能是一個更簡單的解決方案
#include <stdio.h>
int main(){
int num = 0, digits = 0;
while (num <= 0)
{
printf("Enter a natural number\n");
scanf("%d", &num);
num == 0 ? printf("Error\n") : 0;
}
for( ; num > 0; digits )
num /= 10;
printf("number of digits: %d\n", digits);
}
由于num連續除以 10,結果的小數點被截斷,因為num一段int時間digits穩定增加。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416403.html
標籤:
上一篇:獲取固定記憶體位置的內容
