2017-03-01 3 views
-3

このコードは、入力番号の数字を数えようとします。先行ゼロを含む数字の数字を数えるには?

入力番号が06584の場合、このコードの出力は0以外の4になります。 5を出力するにはどうすればいいですか(ゼロを数える)?先行ゼロを含む数で数字をカウントする方法

#include<stdio.h> 
void main() 
{ 
    int n,c=0,d; 
    printf("Enter no\n"); 
    scanf("%d",&n); 
    while(n!=0) 
    { 
     d=n%10; 
     c++; 
     n=n/10; 
    } 
    printf("No of digits=>%d\n",c); 
} 
+8

ません数学的解は、先行ゼロを検出しようとしています。ユーザーの入力を文字列として読み込み、文字列の長さを取得する必要があります。 – Kenster

+0

whileの前にnの 'printf'を追加すると、先行する0が消えていることがわかります – pm100

+1

' char n [100]; scanf( "%s"、n); c = strlen(n); '。それは入力が有効であると仮定して桁数を与えます。それが本当に数字であることを確認するには 'strtol'を使います。 – kaylum

答えて

0
#include<stdio.h> 
#include <string.h> 
int main() 
{ 
    char n[101]; 
    printf("Enter no\n"); 
    scanf("%100s",n); 
    printf("No of digits=>%d\n",strlen(n)); 
} 
3

先行する0桁を含めて、入力された桁数をカウントするには、その前と後のスキャンオフセットを記録します。このメソッドは、符号文字を数字として報告しますが、先頭の空白は数えません。

これまでにスキャンした文字数を記録するには、"%n"を使用します。 @BLUEPIXY

#include<stdio.h> 

int main() { 
    int begin; 
    int after = 0; 
    int number; 
    printf("Enter number\n"); 
    fflush(stdout); 
    //  +--- consumes leading white-space 
    //  | +- record number of characters scanned 
    scanf(" %n%d%n", &begin, &number, &after); 
    if (after > 0) { 
    printf("No of digits: %d\n", after - begin); 
    printf("Value read : %d\n", number); 
    } else { 
    puts("Invalid input"); 
    } 
} 

出力

Enter number 
    00
No of digits: 6 
Value read : 123 
関連する問題