該程式會詢問用戶一個整數輸入。它計算 int 有多少個零。約束:使用while回圈
例如:輸入:2400 計數:2
現在我在那部分沒有問題,只有當用戶輸入零時。假設它計數為 1。
例如:輸入 0 計數:1
但隨后程式回傳計數 0。
這是代碼:
int main(){
int n, counter = 0;
printf("Enter the number: ");
scanf("%d", &n);
while(n != 0){
if(n % 10 == 0){
counter ;
n=n/10;
}else{
break;
}
}
printf("%d", counter);
return 0;
}
uj5u.com熱心網友回復:
- 使用函式。
int countZeroes(int x)
{
int result = !x; // if x == 0 then result = 1
while(x)
{
result = !(x % 10);
x /= 10;
}
return result;
}
int main(void)
{
printf("%d\n", countZeroes(0));
printf("%d\n", countZeroes(1000));
printf("%d\n", countZeroes(-202020));
}
https://godbolt.org/z/91hKr46eo
uj5u.com熱心網友回復:
你有while(n != 0)這個,當你輸入 0 時它不會運行。所以你一開始設定為0的計數器仍然是0
這是我會做的:
int main()
{
int num, count = 0;
scanf("%d",&num);
if (num == 0) {
printf("1");
return 0;
}
while(num != 0) //do till num greater than 0
{
int mod = num % 10; //split last digit from number
num = num / 10; //divide num by 10. num /= 10 also a valid one
if(mod == 0) count ;
}
printf("%d\n",count);
return 0;
}
只是不要忘記考慮在您設定的條件下可能發生的所有事情
**解決它
uj5u.com熱心網友回復:
將整數列印為字串并在其中查找“0”字符的不同版本。經測驗。
#include <stdio.h>
#include <string.h>
int main(void)
{
int input = 0;
int zeroes = 0;
char *foundpos, teststring[100];
scanf("%d", &input);
sprintf(teststring, "%d", input);
foundpos = strchr(teststring, '0');
while (foundpos != NULL) {
zeroes;
foundpos = strchr(foundpos 1, '0');
}
printf("%d contains %d zeroes", input, zeroes);
}
uj5u.com熱心網友回復:
這是另一個解決方案:
它使用一個無限的“while”回圈——當 n 等于 0 時退出回圈。本質上,它將“while”回圈轉換為“do while”回圈。
/* loop-and-a-half problem
*/
#include <stdio.h>
int main (void)
{
printf("\n"
"enter n: ");
int n;
scanf("%d", &n);
printf("\n");
int count = 0;
while (1) {
if (n % 10 == 0) {
count;
}
n /= 10;
if (n == 0) {
break;
}
}
printf("count: %d\n", count);
return 0;
}
uj5u.com熱心網友回復:
如前所述,問題在于回圈:
while(n != 0){
if(n % 10 == 0){
counter ;
n=n/10;
}else{
break;
}
}
如果 n == 0,它不會做任何事情。但是用 n > 0 代替它不是一個好的解決方案,因為 int 也可以是負數。您應該改用 do{}while() 構造,無論您在那里放置什么條件,它都會執行一次回圈迭代。請注意,無論您得到什么作為數字,它仍然是一個數字,因此您可以以任何一種方式進行一次回圈迭代。只需執行以下操作:
do{
if(n % 10 == 0){
counter ;
n=n/10;
}else{
break;
}
} while( n != 0 );
這應該有效(如果我沒有弄亂大括號/分號)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/517970.html
上一篇:根據列值顯示/隱藏按鈕
